1.首先我们写一个类实现Callable接口:
public class MyThread implements Callable<Integer>{
@Override
public Integer call() throws Exception{
return 6666;
}
}
&&需要对比实现Runnable接口的区别:
1.重写call()方法;
2.有返回值;
3.需要抛出异常。
2.通过查看官方文档我们发现,创建线程只能传入实现了Runable接口的类的对象,并没有重载实现Callable接口的。
因此我们可以想到要找一个中间人,去连接Callable接口和Thread,这里其实是使用了适配器模式的设计思想,这个中间人就是FutureTask。
FutureTask的继承关系图如下所示:
3.在main主线程调用创建的新线程
public class CallableDemo{
public static void main(String[] args){
//FutrueTask作为中间人(适配器)接受实现Callable的类对象,返回实现Runnable接口的类对象
FutureTask futureTask = new FutureTask(new MyThread());
//因为FutrueTask实现了Runnable接口,就跟Runnable接口一样传入Thread中构造即可
new Thread(futureTask,"A").start();
}
}
1.FutrueTask作为中间人(适配器)接受实现Callable的类对象,返回实现Runnable接口的类对象;
2.因为FutrueTask实现了Runnable接口,就跟Runnable接口一样传入Thread中构造即可。