一、Callable接口定义
-
从最传统的方法来讲如果要进行多线程的实现肯定依靠的就是Runnable,但是Runnable接口有一个缺点:当线程执行完毕后无法获取一个返回值,所以从JDK1.5之后就提出了一个新的线程实现接口:java.util.concurrent.Callable接口。
Callable接口源码:
@FunctionalInterface public interface Callable<V> { /** * Computes a result, or throws an exception if unable to do so. * * @return computed result * @throws Exception if unable to compute a result */ V call() throws Exception; }
-
优点:
- 可以获得任务执行返回值。
- 和Future结合,利用Future跟踪异步计算的结果。
二、Future接口
- Future接口代表了一个异步计算的结果。
- 通过get()方法得到结果。
三、Callable执行方式
-
借助FutureTask类执行
- FutureTask类同时实现了两个接口:Future以及Runnable接口。
- 由于FutureTask类实现了Runnable接口,所以Thread和Callable就建立了联系,Callable可以借助FutureTask来调用Thread里面的start()方法来启动多线程程序。
-
执行流程:
//