实现多线程的三种方法:继承Thread类,实现Runnable接口和实现Callable接口

实现多线程的三种方法:

1,继承Thread,重写run()方法,调用start()方法启动线程;

2,实现Runnable接口,实现run()方法,用new Thread(Runnable target).start()方法启动相应线程;

3,实现Callable接口,使用FutureTask包装器,实现call()方法,而且call()方法有返回值,可以抛出异常;

1 //实现Callable接口
2 class Test implements Callable<Integer> {
3 
4     @Override
5     public Integer call() throws Exception {
6         return 1024;
7     }
8 }

Callable接口与Runnable接口的区别:

(1),是否有返回值

(2),是否抛异常

(3),要实现的方法不一样,一个是run,一个时call方法

实现Callable接口的多线程实现方法:

 1 import java.util.concurrent.Callable;
 2 import java.util.concurrent.ExecutionException;
 3 import java.util.concurrent.FutureTask;
 4 
 5 public class ThreadPro {
 6     public static void main(String[] args) throws ExecutionException, InterruptedException {
 7         Test test=new Test();
 8         FutureTask futureTask=new FutureTask(test);
 9         new Thread(futureTask,"A线程").start();
10         System.out.println("......");
11         System.out.println(futureTask.get());
12     }
13 }
14 
15 //实现Callable接口
16 class Test implements Callable<Integer> {
17 
18     @Override
19     public Integer call() throws Exception {
20         System.out.println("HELLO!......");
21         return 1024;
22     }
23 }

Thread类没有可以直接传入Callable接口的构造器,需要使用实现了Runnable接口,含有Callable接口构造器的包装类futureTask类。

 引入Callable接口具有哪些好处:
(1),可以获得任务执行返回值;
(2),通过与FutureTest的结合,可以实现利用FutureTest来跟踪异步计算的结果。并且多个线程执行同一个类的call方法,只会被执行一次,因为返回值已经保存记住了。

猜你喜欢

转载自www.cnblogs.com/fangtingfei/p/12020772.html