一个可取消的异步计算。FutureTask提供了对Future的基本实现,可以调用方法去开始和取消一个计算,可以查询计算是否完成并且获取计算结果。只有当计算完成时才能获取到计算结果,一旦计算完成,计算将不能被重启或者被取消,除非调用runAndReset方法。
除了实现了Future接口以外,FutureTask还实现了Runnable接口,因此FutureTask交由Executor执行,也可以直接用线程调用执行(futureTask.run())。
Callable接口和Runnable接口有什么不同?
Callable需要实现call方法,而Runnable需要实现run方法;并且,call方法还可以返回任何对象,无论是什么对象,JVM都会当作Object来处理。但是如果使用了泛型,我们就不用每次都对Object进行转换了。
区别:
- Callable可以返回一个类型V,而Runnable不可以
- Callable能够抛出checked exception,而Runnable不可以。
- Runnable是自从java1.1就存在,而Callable是1.5之后才加上去的。
- Callable和Runnable都可以应用于executors。而Thread类只支持Runnable。