Future
接口允许表示已经完成的任务、正在执行过程中的任务或者尚未开始执行的任务。通过 Future
接口,可以尝试取消尚未完成的任务,查询任务已经完成还是取消了,以及提取(或等待)任务的结果值。
FutureTask
类实现了 Future
,并包含一些构造函数,允许将 Runnable
或 Callable
(会产生结果的 Runnable
)和 Future
接口封装。因为 FutureTask
也实现 Runnable
,所以可以只将 FutureTask
提供给 Executor
。一些提交方法(如 ExecutorService.submit()
)除了提交任务之外,还将返回 Future
接口。
Future.get()
方法检索任务计算的结果(或如果任务完成,但有异常,则抛出 ExecutionException
)。如果任务尚未完成,那么Future.get()
将被阻塞,直到任务完成;如果任务已经完成,那么它将立即返回结果。
该示例代码与 java.util.concurrent
中的多个类关联,突出显示了 Future
的功能。它实现缓存,使用 Future
描述缓存值,该值可能已经计算,或者可能在其他线程中“正在构造”。
它利用 ConcurrentHashMap
中的原子 putIfAbsent()
方法,确保仅有一个线程试图计算给定关键字的值。如果其他线程随后请求同一关键字的值,它仅能等待(通过 Future.get()
的帮助)第一个线程完成。因此两个线程不会计算相同的值。
public class Cache<K, V> {
ConcurrentMap<K, FutureTask<V>> map = new ConcurrentHashMap();
Executor executor = Executors.newFixedThreadPool(8);
public V get(final K key) {
FutureTask<V> f = map.get(key);
if (f == null) {
Callable<V> c = new Callable<V>() {
public V call() {
// return value associated with key
}
};
f = new FutureTask<V>(c);
FutureTask old = map.putIfAbsent(key, f);
if (old == null)
executor.execute(f);
else
f = old;
}
return f.get();
}
}
分享到:
相关推荐
《Python未来库(Future)详解及安装指南》 在Python编程中,`future`库是一个不可或缺的工具,它为Python 2和Python 3之间的互操作性提供了强大的支持。`future-0.17.1.tar.gz`是该库的一个版本压缩包,包含了在...
《Python的Future模块详解及其0.18.2版本特性》 在Python编程中,`future`库是一个不可或缺的工具,它为Python 2和Python 3之间的代码兼容提供了便利。`future-0.18.2-py3-none-any.whl`是一个针对Python 3的whl...
《Python库future-0.12.0:跨越Python版本的桥梁》 在Python的世界里,随着版本的迭代,语法和特性不断更新,这给代码的兼容性带来了挑战。为了解决这一问题,Python社区开发了一个名为`future`的库,它的全名是`...
"Java使用Callable和Future创建线程操作示例" Java使用Callable和Future创建线程操作示例主要介绍了Java使用Callable和Future创建线程操作,结合实例形式分析了java使用Callable接口和Future类创建线程的相关操作...
`future`库就是其中一个重要的依赖包,它为Python 2和Python 3之间的兼容性提供了解决方案。本文将详细介绍`future`库以及如何安装和打包这个依赖包。 `future`库是专门为解决Python 2到Python 3迁移问题而设计的。...
标题中的"future-0.18.2.tar.gz"是一个软件包的名称,它采用了常见的压缩格式".tar.gz"。这种格式是Linux和Unix系统中常用的归档和压缩方法,由".tar"(用于打包多个文件和目录)和".gz"(Gzip压缩算法)组合而成。...
【FutureAlpha演示(提纲性)】是一个关于中国人自主研发的操作系统的详细介绍,旨在展示其核心理念、技术特点以及可能带来的未来影响。在这个演示中,我们可能会深入了解到这款名为FutureAlpha的操作系统的创新之处,...
Python的`future`库是为了解决Python 2与Python 3之间的兼容性问题而设计的,它使得Python 2的代码可以更容易地转换到Python 3,或者编写出同时兼容两个版本的代码。`future-0.16.0.tar.gz`是一个压缩包,包含了`...
Java中的Runnable、Callable、Future和FutureTask是Java多线程编程中的核心概念,它们各自扮演着不同的角色,共同协作以实现并发任务的管理和执行。 1. **Runnable**: Runnable是最基本的多线程接口,它只有一个`...
`future`是一个核心概念,特别是在`concurrent.futures`模块和`asyncio`包中。`Future`对象是这些模块的核心组件,用于表示一个可能会在未来某个时刻完成的异步操作。 `concurrent.futures`模块提供了一个高级接口...
《Python的Future模块详解——基于future-0.18.2-py3-none-any.whl的探讨》 在Python编程中,"future"模块扮演着一个至关重要的角色,尤其是在处理Python 2到Python 3的过渡阶段。"future-0.18.2-py3-none-any.whl...
该文档标题为“Fundamental design issues for the future Internet”,即“未来互联网的基础设计问题”,这表明文档将讨论未来互联网发展过程中可能遇到的关键技术问题。描述中提到,尽管互联网最初的设计目的是...
《基于Web的集成化项目管理系统Future1.0使用手册》 1. 产品介绍 Future1.0是一款专为IT企业设计的集成化项目管理系统,它利用Web技术,实现了跨地域、多团队的协同工作,旨在提升项目管理的效率和效果。系统提供了...
在Swift编程语言中,"Future" 是一个设计模式,它被用于处理异步操作和结果的响应。这个概念源于函数式编程,已经被许多现代编程语言所采纳,包括Swift。"Future" 实现了一种机制,使得开发者可以在异步任务完成之前...
本项目"Android-Future基于Kotlin协同程序的简单的monadic未来实现"旨在提供一个轻量级的、面向未来的异步处理框架,以帮助开发者更方便地处理并发任务。 首先,让我们深入理解什么是"Future"。在编程领域,Future...
下一代网络(The Future X Network)是贝尔实验室的作品,聚焦于网络技术的未来发展方向和变革。本书深入剖析了未来网络环境所涉及的关键技术,系统架构的创新以及系统层面的突破点,旨在构建一个全新的数字化未来。书...
《Python库future_fstrings-0.4.1详解》 在Python编程中,字符串处理是一项基本且频繁的任务,尤其在动态生成代码或者日志记录时。`future_fstrings`是Python社区开发的一个库,旨在为Python 2和Python 3提供一致的...
03 The Future of Architecture.pdf 04 j2ee_leon.pdf 04 j2ee_richard.pdf 05 SOA软件架构的实现.pdf 06 1Design Patterns.pdf 06 2Agile Software Development.pdf 06 3IsDesignDead.pdf 07 Architecture.pdf 07 ...