美文网首页
多线程的实现方式

多线程的实现方式

作者: 刺風 | 来源:发表于2018-11-13 21:15 被阅读0次
一、线程、进程、单线程、多线程
  1. 进程:执行中的程序,一个进程可以包含一个或多个线程,一个进程至少要包含一个线程。
  2. 线程:线程是一个程序里面不同的执行路径。
  3. 单线程:程序中只存在一个线程,实际上主方法就是一个主线程。
  4. 多线程:多线程是一个程序中运行多个任务,多线程是为了更好的使用CPU资源。

注意:所谓多线程看上去是同步执行,实际上那是因为cpu进行了时间分片,同一个时间点只会执行一个线程,因为cpu计算很快,所以看上去好像是同步执行。

二、JAVA实现多线程的方式
  1. Thread类
    通过继承java.lang.Thread类来实现。
    继承Thread类必须重写run方法,demo:
public class MyThread extends  Thread {
    private String name;
    public MyThread(String name){
        this.name = name;
    }
    @Override
    public void run() {
        for (int i = 0; i < 1000; i++) {
            System.out.println(name+":"+i);
        }
    }
}

public class ThreadTest {
    public static void main(String[] args) {
        MyThread t1 = new MyThread("A");
        MyThread t2 = new MyThread("B");
        t1.start();
        t2.start();
    }
}
  1. Runnable接口
    通过直接实现Runnable来实现多线程。
public class MyRunnable implements Runnable {
    private String name;
    public MyRunnable(String name){
        this.name = name;
    }
    @Override
    public void run() {
        for (int i = 0; i <1000 ; i++) {
            System.out.println(name+":"+i);
        }
    }
}

public class RunnableTest {
    public static void main(String[] args) {
        Thread t1 = new Thread(new MyRunnable("A"));
        Thread t2 = new Thread(new MyRunnable("B"));
        t1.start();
        t2.start();
    }
}
  1. Callable接口
    从Java 1.5开始,就提供了Callable和FutureTask,通过它们可以在任务执行完毕之后得到任务执行结果。
public class MyCallable  implements Callable{
    private String name;
    public MyCallable(String name){
        this.name = name;
    }
    @Override
    public Object call() throws Exception {
        for (int i = 0; i < 1000; i++) {
            System.out.println(name+":"+i);
        }
        return null;
    }
}

public class CallableTest {
    public static void main(String[] args) {
        Thread t1 = new Thread(new FutureTask(new MyCallable("A")));
        Thread t2 = new Thread(new FutureTask(new MyCallable("B")));
        t1.start();
        t2.start();
    }
}
  1. ExecutorService 线程池创建
    使用线程池必须要掌握ThreadPoolExecutor这个对象:


    ThreadPoolExecutor.png

    通过上图可以看出来,ThreadPoolExecutor是ExecutorService 的实现类。
    与此类相关的还需要掌握一个类Executors:


    Executors.png
    如图所示,该类提供了一系列封装好的静态方法,可以返回ExecutorService对象,该类主要提供的方法大致分为:指定长度的线程池、单个线程的线程池、非核心线程的缓存线程池、支持定时和周期性任务的线程池等。
    通过示例可以更清楚的去理解:
public class ExecutorServiceTest {
    public static void main(String[] args)  {
        ExecutorService service = Executors.newSingleThreadExecutor();
        try {
            // 支持Callable<T>,Runnable
            Future task = service.submit(new MyCallable("A"));
            // 可以拿到线程执行完的返回值,返回值类型同call方法的返回值类型一致
            Object obj =task.get();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }finally {
            service.shutdown();
        }
    }
}

相关文章

  • Java多线程1

    创建多线程的3种方式 1、继承Thread类实现多线程 2、实现Runnable接口方式实现多线程 定时器 线程的...

  • GCD方式的多线程

    GCD方式的多线程 概念讲解 NSOperation方式实现多线程

  • Java-多线程(一)

    NO.1 多线程简介 NO.2 多线程实现方式(一) NO.3 多线程实现方式(二) NO.4 匿名内部类实现线程...

  • 多线程(最全面试题04)

    Java实现线程有哪几种方式?1、继承Thread类实现多线程2、实现Runnable接口方式实现多线程3、使用E...

  • 创建线程的方式

    1创建线程的几种方式a.继承Thread类实现多线程b.实现Runnable接口方式实现多线程c.使用Execut...

  • 多线程经典面试题及答案

    java实现线程有哪几种方式 1.继承Thread类实现多线程2.实现Runnable接口方式实现多线程3.使用线...

  • OC_多线程实现的几种方式

    参考链接IOS多线程实现方式 实现程序多线程执行的三种方式: 1、 NSThread2、Cocoa NSOpera...

  • Java中的多线程实现方式

    Java中的多线程实现方式 在我们的开发的过程中,常常会碰到多线程的问题,对于多线程的实现方式主要有两种:实现Ru...

  • 2021-01-26

    实现多线程的方式到底有几种?1.如何创建多线程方式一:继承Thread类方式二:实现Runnable接口继承Thr...

  • java多线程

    1.JAVA多线程实现方式 JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用E...

网友评论

      本文标题:多线程的实现方式

      本文链接:https://www.haomeiwen.com/subject/wyksdxtx.html