Future

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();
    }
}
 
Java Future接口、Future模式理解 而在服务端程序,阻塞操作会降低系统的吞吐量,future模式试用的范围较窄,一般服务端采用异步回调的方式,将耗时的操作并行化,再通过回调方式将结果合并。Future构造时生成了虚拟的结果,如果使用这个结果越晚,当get_result时越不容易阻塞,所以从生成future到获取结果的间隔越长,future模式的功效越大。什么是future:future的原理是当你申请资源(计算资源或I/O资源)时,立即返回一个虚拟的资源句柄,当真正使用的时候,再将虚拟的句柄转化成真正的资源,相当于预获取。 阅读详情

相关推荐

极化码理论及算法研究6-SCL、CA-SCL及matlab仿真

极化码译码算法5——SCL/CA-SCL译码算法系列目录1、引言2、串行抵消列表(SCL)译码算法2.1、路径度量PM 系列目录 (如要找其他内容,欢迎访问我的主页寻找) #前言 #极化码概述 #极化码定义 #极化码编码 #极化码译码 #5G标准中极化码的编译码概述 #5G标准中极化码的编码 #5G标准中极化码的译码 #总结 1、引言 在上一节中,介绍了经典的SC译码算法的理论原理以及其matlab仿真代码,SC译码算法具有较低的译码复杂度,但是由于每个译码的比特信息都依赖于前面所有的比特信息的译码结果,得

1万+

JAVA Future类详解

多线程必看

敖丙 2万+

AI智能体项目管理框架agent-pm:从原理到实战的多智能体协作指南

在人工智能和自动化技术快速发展的今天,多智能体系统已成为实现复杂任务自动化的重要技术路径。其核心原理在于通过任务分解、角色分配和状态管理,让多个AI智能体像人类团队一样协同工作,从而突破单个模型的性能边界。这种架构的技术价值在于将软件工程中成熟的项目管理方法论引入AI领域,显著提升了自动化流程的可预测性、可观测性和可复用性。在实际应用场景中,多智能体协作框架能够高效处理从代码开发、文档撰写到数据分析等一系列任务,尤其适合需要多步骤、多专业协同的复杂项目。本文聚焦的agent-pm框架,正是这一领域的典型实践

weixin_42533910的博客 714

通俗讲解c++ future/shared_future

目录future简介std::future对象只有在有效的(valid)情况下才有用(useful)查询future对象是否有效future的拷贝构造函数是被禁用的对future的处理四种方式获取future的状态future_status的三种状态: future简介 future 是一个用来获取异步任务的结果,其存在的意义 其实就是为了解决 std::thread 无法返回值的问题 future可以想象成一个来自未来的使者,定义它的时候,相当于某个预言家预言在未来的某一天会出现这个使者。 预言只有

qq_38836770的博客 8971

Apk脱壳圣战之---脱掉“梆梆加固”的保护壳

一、前言 现如今Android用户的安全意识不是很强,又有一些恶意开发者利用应用的名字吸引眼球,包装一个恶意锁机收费的应用,在用户被骗的安装应用之后,立马手机锁机,需要付费方可解锁。这样的恶意软件是非常让人痛恨的。所以本文就用一个案例来分析如何破解这类应用,获取解锁密码,让被骗的用户可以找回爽快! 二、分析软件锁机原理 本文用的是一款叫做:安卓性能激活.apk,关于样本apk文件后面会...

尼古拉斯.赵四的博客 5060

实战演练,如何用Easyexcel合并单元格,设置字体、边框样式,并在尾行加入备注

,实现效果如下:1、多级表头合并2、表头底纹+表格边框3、合并相同数据单元格4、尾行加入备注。

Su7148的博客 1万+

Dart之Future

Future Dart类库有非常多的返回Future或者Stream对象的函数。 这些函数被称为异步函数:它们只会在设置好一些耗时操作之后返回,比如像 IO操作。而不是等到这个操作完成。 async和await关键词支持了异步编程,允许您写出和同步代码很像的异步代码。 1. Future.then 使用 Future.delayed 模拟一个耗时操作,2秒后返回字符串“Hello Dart”,然后在then中接收到异步返回值,并打印出来: Future.delayed(new Duration(seco

一只程序菜鸡的博客 9138

思科9117AP从零配置EWC模式实战:Wi-Fi6网络搭建避坑指南

本文详细介绍了思科9117AP在Wi-Fi6网络环境下配置EWC模式的实战指南,涵盖镜像准备、网络环境配置、模式转换步骤及高级运维技巧。通过EWC模式,企业可实现控制器与AP的一体化部署,显著降低成本和简化运维,特别适合中小企业Wi-Fi6网络搭建。

weixin_28318011的博客 333

Scala之Future

package base.day06.future import scala.concurrent.{ExecutionContext, Future} import scala.util.{Failure, Success} /** * @description FutureDriver * @author ZerlindaLi create at 2019/5/8 15:50 ...

李鬼989的专栏 1608

量化交易之因子分析大全

在机器学习项目中,特征工程是非常重要的。在量化研究中也是如此。本文将量化研究中常用到的特征,也就是因子进行详细收纳,并给出推导公式和实现代码。

夏之微风的博客 2282

SpringBoot系列之实现一个AI聊天助手

本文介绍了基于Spring Boot框架实现的AI聊天助手项目。该项目使用Spring Boot 3.2.3、Spring AI 1.0.0-M5等技术栈,集成DeepSeek-R1-Distill-Llama-8B模型实现智能对话功能。文章详细介绍了项目配置流程、运行方式和核心代码实现,包括ChatMessage模型类和服务类ChatService的关键功能,如消息处理、历史记录管理和AI响应获取等。读者可通过提供的GitHub链接获取完整代码,快速搭建自己的AI聊天应用。

Nicky's blog 1451

JAVA Future类的使用

一.Future的类图结构 Future接口定义了主要的5个接口方法,有RunnableFuture和SchedualFuture继承这个接口,以及CompleteFuture和ForkJoinTask继承这个接口。 RunnableFuture 这个接口同时继承Future接口和Runnable接口,在成功执行run()方法后,可以通过Future访问执...

sunny潘先生的博客 2万+

大数据运营可视化:Tableau+PowerBI数据看板搭建教程

当企业数据量从“GB级”跃升到“TB级”,运营人员面临的最大挑战不再是“如何收集数据”,而是“如何让数据说话”。数据看板作为“运营指挥中心的仪表盘”,能将零散的用户行为、业务指标、流量趋势浓缩成可快速解读的视觉语言。本文结合Tableau(自由探索的“数据瑞士军刀”)与PowerBI(微软生态的“组合家具”)两大工具,从需求分析→数据准备→指标设计→视图搭建→ dashboard 组合,一步步教你搭建符合业务逻辑的运营看板。

AI智能探索者的博客 1364

Future和FutureTask的区别

先看下Future、FutureTask相关类的关系 Future只是一个接口,FutureTask是实现了RunnableFuture Future接口可以实现的功能 Future呈现的是异步计算的结果。Future中的方法提供了检查计算是否已经完成,并且等待计算的结果,还能够重新获取计算记得结果。当计算已经完成的时候只能使用get()方法获取结果,如果有需要的话,可以一直阻塞等待结果,直到结...

m0_37148920的博客 1万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

future wait_for()成员、shared_future

wait_for():等待其异步操作操作完成或者超出等待,用于检查异步操作的状态。wait_for()可以接受一个std::chrono::duration类型的参数,它表示等待的最大时间,会返回一个std::future_status枚举值(枚举类型)。如果在调用async时使用了std::launch::deferred参数,那么函数将在future调用get()时在主线程中执行,而调用wait_for()会返回std::future_status::deferred,表示线程被延迟执行了。

2301_78933228的博客 919

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

java中Future的使用

文章目录创建Future从Future获取结果取消Future多线程环境中运行 java中Future的使用 Future是java 1.5引入的一个interface,可以方便的用于异步结果的获取。 本文将会通过具体的例子讲解如何使用Future。 创建Future 正如上面所说,Future代表的是异步执行的结果,意思是当异步执行结束之后,返回的结果将会保存在Future中。 那么我们什么时候...

程序那些事 1万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Guava Future

Guava Future 能够 减少主函数的等待时间,使得多任务能够异步非阻塞执行 ListenableFuture是可以监听的Future,它是对java原生Future的扩展增强。Future表示一个异步计算任务,当任务完成时可以得到计算结果。如果希望计算完成时马上就拿到结果展示给用户或者做另外的计算,就必须使用另一个线程不断的查询计算状态。这样做会使得代码复杂,且效率低下。如果使用List...

蓝天之枫 5761

C++ future使用

前言:对比Java 线程通过run(callable)返回的future,C++ 11便准库提供了future来提供了一种访问异步操作结果的机制,从字面意思来理解,它表示未来,我觉得这个名字非常贴切,因为一个异步操作我们是不可能马上就获取操作结果的,只能在未来某个时候获取,但是我们可以以同步等待的方式来获取结果,可以通过查询future的状态(future_status)来获取异步操作的结果。 future_status有三种状态: deferred:异步操作还没开始 ready:异步操作已经完成 tim

qq_38996911的博客 3947

Future模式详解

Future模式是多线程开发中常见的设计模式,它的核心思想是异步调用。对于Future模式来说,它无法立即返回你需要的数据,但是它会返回一个契约,将来你可以凭借这个契约去获取你需要的信息。这是传统的同步方法,调用一段耗时的程序。当客户端发出call请求,这个请求需要很长的一段时间才会返回,客户端一直在等待直到数据返回随后再进行其他任务的处理。 而使用Future模式:从Data_Future对象可以看到虽然本身任然需要一段很长时间处理程序。但是服务程序并不等数据处理完成便立即返回客户端一个伪造的数据(如:

weixin_43816711的博客 2577

flutter中的future是什么?

在上面的示例中,我们创建了一个StreamController对象,并使用add方法将三个数据添加到Stream中。Future.wait接受一个Future对象列表作为参数,返回一个新的Future对象,它会在所有给定的Future对象都完成之后完成。在上面的示例中,我们创建了一个包含三个Future对象的列表,每个Future对象都会在不同的时间返回一个字符串。Future.any接受一个Future对象列表作为参数,返回一个新的Future对象,它会在给定的Future对象中有任何一个完成时完成。

qq_28563283的博客 1867

Dart 异步编程之 Future 详解

Dart 异步编程的核心 Future 机制详解 Dart 采用单线程模型,通过 Future 实现异步操作以避免阻塞主线程。Future 表示一个异步操作的结果,包含未完成、成功完成(带值)、失败完成(带错误)三种核心状态。开发者可通过 Future.value、Future.delayed 和 Future.error 创建不同状态的 Future 对象。 处理 Future 结果主要使用 then() 处理成功值、catchError() 捕获错误、whenComplete() 执行完成回调。通过链式

顾林海 2228

谈C++的future

future

leapmotion的博客 2933

17 Future

文章目录在future中运行任务等待结果 并发应用 在Future{}里的代码块是并发执行的 future要么成功得到一个结果,要么以异常失败 用回调实现future完成时收到通知,串联回调比较麻烦 map/flatMap或for组合多个future promise有一个其值可被单次设置的future,使得实现产出的结果的任务变得更为灵活 适合并发计算负载的执行上下文 在future中运行任务...

自度度人 自觉觉他 488

浅谈Future

原文地址:http://www.cnblogs.com/wenjiang/archive/2012/09/02/2668089.html Future到底是什么东西?很多人都对这个东西感到特别奇怪(好吧,我承认,那个很多人就只是我自己而已),就我现在的理解,因为本人在并发这方面没有多少实践经验,所以只好就着一些资料和自己的理解给它下个定义,Future就是保存我们任务的完成信息,比如说,

u014604403的专栏 4418

future_error详解

引言 遇到这个问题以后第一次没有得到解答 随后经测试和查阅资料知道了它的由来 希望能有相同问题的朋友能得到帮助

李兆龙的博客 4334
上一篇: java线程池
下一篇: CompletionService
gufengjava
博客等级 码龄16年 1粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值