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>{@Overridepublic Integer call() throws Exception {System.out.println("call");return 123;}
}
- get可以获取到返回值
- 因为Future Task存在一个泛型V,在初始化的时候就传入了,所以,返回的是Integer
- 但是get方法可能会造成阻塞,需要等待进行返回值,所以会造成阻塞