在网上学习后,自我整理一下对callable的理解。
(1)Callable规定的方法是call(),而Runnable规定的方法是run().
(2)Callable的任务执行后可返回值,而Runnable的任务是不能返回值的。
(3)call()方法可抛出异常,而run()方法是不能抛出异常的。
(4)运行Callable任务可拿到一个Future对象, Future表示异步计算的结果。
它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。
通过Future对象可了解任务执行情况,可取消任务的执行,还可获取任务执行的结果。
Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其它线程执行的任务。
FutureTask类实现了RunnableFuture接口
public interface RunnableFuture<V> extends Runnable, Future<V> {
voidrun();
}
RunnableFuture 继承了 Runnable
可以通过FutureTask获取callable的返回结果
FutureTask中提供了一个以callable作为入参的方法
RunnableFuture继承了Runnable接口和Future接口,而FutureTask实现了RunnableFuture接口。所以它既可以作为Runnable被线程执行,又可以作为Future得到Callable的返回值。
FutureTask提供了2个构造器:
publicFutureTask(Callable<V> callable) {
}
publicFutureTask(Runnable runnable, V result) {
}
事实上,FutureTask是Future接口的一个唯一实现类。