如何应用多线程

如何应用多线程_第1张图片

在 Java 中,有多种方式来实现多线程。继承 Thread 类、实现 Runnable 接

口、使用 ExecutorService、Callable、Future 实现带返回结果的多线程。

继承Thread 

Thread 类本质上是实现了 Runnable 接口的一个实例,代表一个线程的实例。

启动线程的唯一方法就是通过 Thread 类的 start()实例方法。start()方法是一个

native 方法,它会启动一个新线程,并执行 run()方法。这种方式实现多线程很

简单,通过自己的类直接 extend Thread,并复写 run()方法,就可以启动新线

程并执行自己定义的 run()方法。

640?wx_fmt=png

/**
* @auther: tianweichang
* @date: 2018/8/28 20
* @Description: 继承Thread
*/
public class MyThread extends Thread {
public void run() {
System.out.println("MyThread.run()");
   }

public static void main(String[] args) {
MyThread myThread1 = new MyThread();
       MyThread myThread2 = new MyThread();
       myThread1.start();
       myThread2.start();
   }
}

实现Runnable 

java单线程的问题,如果自己的类已经 extends 另一个类,就无法直接 extends Thread,此时,可以实现一个 Runnable 接口

如何应用多线程_第2张图片

如何应用多线程_第3张图片

实现Callable接口通过FutureTask包装器来创建

Thread  线程

有的时候,我们可能需要让一步执行的线程在执行完成以后,提供一个返回值

给到当前的主线程,主线程需要依赖这个值进行后续的逻辑处理,那么这个时

候,就需要用到带返回值的线程了。Java 中提供了这样的实现方式

/**
* @auther: tianweichang
* @date: 2018/8/28 20
* @Description: 实现Callable创建线程
*/
public class MyCallable implements Callable {
public static void main(String[] args) throws ExecutionException, InterruptedException {
ExecutorService executorService = Executors.newSingleThreadExecutor();
       MyCallable callableDemo = new MyCallable();
       Future future = executorService.submit(callableDemo);
       System.out.println("返回值:" + future.get());//get是阻塞的
       executorService.shutdown();
   }

@Override
   public String call() throws Exception {
//do your business
       int a = 1;
       int b = 2;
       System.out.println(a + b);
       return "执行结果:" + (a + b);
   }
}


你可能感兴趣的:(如何应用多线程)