jdk1.8 中Future和FutureTask之间的区别

1 篇文章 0 订阅
1 篇文章 0 订阅

public class FutureTask
extends Object
implements RunnableFuture可取消的异步计算。 该类提供了一个Future的基本实现 ,具有启动和取消计算的方法,查询计算是否完整,并检索计算结果。 结果只能在计算完成后才能检索; 如果计算尚未完成,则get方法将阻止。 一旦计算完成,则无法重新启动或取消计算(除非使用runAndReset()调用计算 )。
A FutureTask可用于包装Callable或Runnable对象。 因为FutureTask实现Runnable ,一个FutureTask可以提交到一个Executor执行。
除了作为独立类之外,此类还提供了protected功能,在创建自定义任务类时可能很有用。

public interface FutureA Future计算的结果。 提供方法来检查计算是否完成,等待其完成,并检索计算结果。 结果只能在计算完成后使用方法get进行检索,如有必要,阻塞,直到准备就绪。 取消由cancel方法执行。 提供其他方法来确定任务是否正常完成或被取消。 计算完成后,不能取消计算。 如果您想使用Future ,以便不可撤销,但不提供可用的结果,则可以声明Future<?>表格的类型,并返回null作为基础任务的结果。
示例使用 (请注意,以下课程都是化妆品。)
interface ArchiveSearcher { String search(String target); } class App { ExecutorService executor = … ArchiveSearcher searcher = … void showSearch(final String target) throws InterruptedException { Future future = executor.submit(new Callable() { public String call() { return searcher.search(target); }}); displayOtherThings(); // do other things while searching try { displayText(future.get()); // use future } catch (ExecutionException ex) { cleanup(); return; } } } FutureTask类是实现Future ,实现Runnable ,所以可以由Executor执行。 例如,以上建设与submit可以替换为:
FutureTask future = new FutureTask(new Callable() { public String call() { return searcher.search(target); }});
executor.execute(future);
内存一致性影响:异步运算采取的操作happen-before操作在另一个线程中相应的Future.get() Future.get() 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值