Callable
- 实现callable接口
- 重写其中的方法
- new Thread().star(),启动
- Thread只能传入Runnable接口的实现类
问题:
Thread只能传入Runnable接口的实现类,那么实现了callable接口该怎么办,才可以让线程启动
- Runnable的实现接口有很多
- 在实现类FunctionTask接口与Callable接口挂上了关系
解决方案
public class CallableTest {
public static void main(String[] args) throws ExecutionException, InterruptedException {
MyThread myThread = new MyThread();
FutureTask<Integer> futureTask = new FutureTask<>(myThread);
new Thread(futureTask).start();
futureTask.get();
}
}
class MyThread implements Callable<Integer>{
@Override
public Integer call() throws Exception {
System.out.println("call");
return 123;
}
}
- get可以获取到返回值
- 因为Future Task存在一个泛型V,在初始化的时候就传入了,所以,返回的是Integer
- 但是get方法可能会造成阻塞,需要等待进行返回值,所以会造成阻塞