JDK7中Future,FutureTask和RunnableFuture源码概述
来源:互联网 发布:股票行情软件哪家好 编辑:程序博客网 时间:2024/06/10 04:42
ExecutorService的submit()方法可以返回Future对象,Future<V>是java.util.concurrent下的包, V是Future的get方法所返回的结果类型。所有已知子接口:Response<T>,RunnableFuture<V>,RunnableScheduledFuture<V>,ScheduledFuture<V>;所有已知实现类:FutureTask,SwingWorker。
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<String> future=executor.submit(new Callable<String>() {
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<String> future=new FutureTask<String>(new Callable<String>() {
public String call() {
return searcher.search(target);
}
});
executor.execute(future);
内存一致性效果:异步计算采取的操作happen-before另一线程中紧跟在相应的Future.get()之后的操作。
FutureTask<V>是java.util.concurrent包下的实现类,V表示FutureTask的get方法所返回的结果类型。所有已实现的接口:Runnable,Future<V>,RunnableFuture<V>。FutureTask<V>是可取消的异步计算。利用开始和取消计算的方法,查询计算是否完成的方法和获取计算结果的方法,此类提供了对Future的基本实现。仅在计算完成时才能获取结果;如果计算尚未完成,则阻塞get方法。一旦计算完成,就不能再重新开始或取消计算。可使用FutureTask包装Callable或Runnable对象。因为FutureTask实现了Runnable,所以可将FutureTask提交给Executor执行。除了作为一个独立的类外,此类还提供了protected功能,这在创建自定义任务类时可能很有用。
RunnableFuture<V>是java.util.concurrent包下的接口,V表示此Future的get方法所返回的结果类型。所有超级接口:Future<V>,Runnable;所有已知子接口:RunnableScheduledFuture<V>;所有已知实现类:FutureTask,SwingWorker。RunnableFuture<V>作为Runnable的Future。成功执行run方法可以完成Future并允许访问其结果。RunnableFuture<V>提供了void run()方法来实现在未被取消的情况下,将此Future设置为计算的结果。
实现可参考:https://github.com/chunericli/wise-utils
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<String> future=executor.submit(new Callable<String>() {
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<String> future=new FutureTask<String>(new Callable<String>() {
public String call() {
return searcher.search(target);
}
});
executor.execute(future);
内存一致性效果:异步计算采取的操作happen-before另一线程中紧跟在相应的Future.get()之后的操作。
FutureTask<V>是java.util.concurrent包下的实现类,V表示FutureTask的get方法所返回的结果类型。所有已实现的接口:Runnable,Future<V>,RunnableFuture<V>。FutureTask<V>是可取消的异步计算。利用开始和取消计算的方法,查询计算是否完成的方法和获取计算结果的方法,此类提供了对Future的基本实现。仅在计算完成时才能获取结果;如果计算尚未完成,则阻塞get方法。一旦计算完成,就不能再重新开始或取消计算。可使用FutureTask包装Callable或Runnable对象。因为FutureTask实现了Runnable,所以可将FutureTask提交给Executor执行。除了作为一个独立的类外,此类还提供了protected功能,这在创建自定义任务类时可能很有用。
RunnableFuture<V>是java.util.concurrent包下的接口,V表示此Future的get方法所返回的结果类型。所有超级接口:Future<V>,Runnable;所有已知子接口:RunnableScheduledFuture<V>;所有已知实现类:FutureTask,SwingWorker。RunnableFuture<V>作为Runnable的Future。成功执行run方法可以完成Future并允许访问其结果。RunnableFuture<V>提供了void run()方法来实现在未被取消的情况下,将此Future设置为计算的结果。
实现可参考:https://github.com/chunericli/wise-utils
阅读全文
0 0
- JDK7中Future,FutureTask和RunnableFuture源码概述
- 《Java源码分析》:Future、RunnableFuture、FutureTask
- 《Java源码分析》:Future、RunnableFuture、FutureTask
- Callable、Runnable、Future、RunnableFuture和FutureTask 深入理解
- JDK7中Runnable和Callable源码概述
- JDK7中BlockingQueue和Queue源码概述
- JDK7中ThreadFactory和RejectedExecutionHandler源码概述
- Runnable,Callable,Future,RunnableFuture,FutureTask,ExecutorService的关系
- Java线程(三):Callable、Future、RunnableFuture、FutureTask
- JDK7中Condition源码概述
- JDK7中Lock源码概述
- JDK7中ReadWriteLock源码概述
- JDK7中Executor源码概述
- JDK7中ExecutorService源码概述
- JDK7中Executors源码概述
- JDK7中ThreadPoolExecutor源码概述
- Java中Future和FutureTask的用法
- Future和FutureTask
- Spring boot分页
- Vuex的理解与运用
- 自动注册路由
- 记录微信分享功能开发
- Spring WebSocket初探2 (Spring WebSocket入门教程)
- JDK7中Future,FutureTask和RunnableFuture源码概述
- 数位DP练习
- linux下的find文件查找命令与grep文件内容查找命令
- mycat注意事项
- centOS-7.x如何配置ipv6
- getSelection和range的笔记
- 五种典型开发周期模型(瀑布、V、原型化、螺旋、迭代)
- Create User流程
- angular/html/购物车