`

Future

    博客分类:
  • JAVA
 
阅读更多

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();
    }
}
 
分享到:
评论

相关推荐

    future-0.17.1.tar.gz

    《Python未来库(Future)详解及安装指南》 在Python编程中,`future`库是一个不可或缺的工具,它为Python 2和Python 3之间的互操作性提供了强大的支持。`future-0.17.1.tar.gz`是该库的一个版本压缩包,包含了在...

    future-0.18.2-py3-none-any.whl 官网太难下载了

    《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.tar.gz

    《Python库future-0.12.0:跨越Python版本的桥梁》 在Python的世界里,随着版本的迭代,语法和特性不断更新,这给代码的兼容性带来了挑战。为了解决这一问题,Python社区开发了一个名为`future`的库,它的全名是`...

    Java使用Callable和Future创建线程操作示例

    "Java使用Callable和Future创建线程操作示例" Java使用Callable和Future创建线程操作示例主要介绍了Java使用Callable和Future创建线程操作,结合实例形式分析了java使用Callable接口和Future类创建线程的相关操作...

    python安装打包依赖包-future-0.18.1.tar.gz

    `future`库就是其中一个重要的依赖包,它为Python 2和Python 3之间的兼容性提供了解决方案。本文将详细介绍`future`库以及如何安装和打包这个依赖包。 `future`库是专门为解决Python 2到Python 3迁移问题而设计的。...

    future-0.18.2.tar.gz

    标题中的"future-0.18.2.tar.gz"是一个软件包的名称,它采用了常见的压缩格式".tar.gz"。这种格式是Linux和Unix系统中常用的归档和压缩方法,由".tar"(用于打包多个文件和目录)和".gz"(Gzip压缩算法)组合而成。...

    FutureAlpha演示(提纲性)

    【FutureAlpha演示(提纲性)】是一个关于中国人自主研发的操作系统的详细介绍,旨在展示其核心理念、技术特点以及可能带来的未来影响。在这个演示中,我们可能会深入了解到这款名为FutureAlpha的操作系统的创新之处,...

    python future-0.16.0.tar.gz

    Python的`future`库是为了解决Python 2与Python 3之间的兼容性问题而设计的,它使得Python 2的代码可以更容易地转换到Python 3,或者编写出同时兼容两个版本的代码。`future-0.16.0.tar.gz`是一个压缩包,包含了`...

    Java中的Runnable,Callable,Future,FutureTask的比较

    Java中的Runnable、Callable、Future和FutureTask是Java多线程编程中的核心概念,它们各自扮演着不同的角色,共同协作以实现并发任务的管理和执行。 1. **Runnable**: Runnable是最基本的多线程接口,它只有一个`...

    使用future处理并发1

    `future`是一个核心概念,特别是在`concurrent.futures`模块和`asyncio`包中。`Future`对象是这些模块的核心组件,用于表示一个可能会在未来某个时刻完成的异步操作。 `concurrent.futures`模块提供了一个高级接口...

    future-0.18.2-py3-none-any.zip

    《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

    该文档标题为“Fundamental design issues for the future Internet”,即“未来互联网的基础设计问题”,这表明文档将讨论未来互联网发展过程中可能遇到的关键技术问题。描述中提到,尽管互联网最初的设计目的是...

    基于Web的集成化项目管理系统Future1.0使用手册.doc

    《基于Web的集成化项目管理系统Future1.0使用手册》 1. 产品介绍 Future1.0是一款专为IT企业设计的集成化项目管理系统,它利用Web技术,实现了跨地域、多团队的协同工作,旨在提升项目管理的效率和效果。系统提供了...

    swift-Future-基于微框架设计思想的异步执行及结果响应类

    在Swift编程语言中,"Future" 是一个设计模式,它被用于处理异步操作和结果的响应。这个概念源于函数式编程,已经被许多现代编程语言所采纳,包括Swift。"Future" 实现了一种机制,使得开发者可以在异步任务完成之前...

    Android-Future基于Kotlin协同程序的简单的monadic未来实现

    本项目"Android-Future基于Kotlin协同程序的简单的monadic未来实现"旨在提供一个轻量级的、面向未来的异步处理框架,以帮助开发者更方便地处理并发任务。 首先,让我们深入理解什么是"Future"。在编程领域,Future...

    The Future X Network.(下一代网络) -.pdf

    下一代网络(The Future X Network)是贝尔实验室的作品,聚焦于网络技术的未来发展方向和变革。本书深入剖析了未来网络环境所涉及的关键技术,系统架构的创新以及系统层面的突破点,旨在构建一个全新的数字化未来。书...

    Python库 | future_fstrings-0.4.1.tar.gz

    《Python库future_fstrings-0.4.1详解》 在Python编程中,字符串处理是一项基本且频繁的任务,尤其在动态生成代码或者日志记录时。`future_fstrings`是Python社区开发的一个库,旨在为Python 2和Python 3提供一致的...

    03 The Future of Architecture.rar

    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 ...

Global site tag (gtag.js) - Google Analytics