CompletableFuture使用(五)

2023-11-03

异步任务交互方法applyToEither,acceptEither和runAfterEither的使用介绍.

1. applyToEither两个异步任务哪个先返回就处理哪个异步任务结果并返回CompletableFuture

CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> {
            SecureRandom random = new SecureRandom();
            int x = random.nextInt(3);
            CommonUtil.sleepSecond(x);
            CommonUtil.printThreadLog("任务1耗时: "+x);
            return "result1";
        });
        CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> {
            SecureRandom random = new SecureRandom();
            int x = random.nextInt(3);
            CommonUtil.sleepSecond(x);
            CommonUtil.printThreadLog("任务2耗时: "+x);
            return "result2";
        });

        CompletableFuture<String> toEither = future1.applyToEither(future2, (res) -> {
            CommonUtil.printThreadLog("最先到达: " + res);
            return res;
        });
        String str = toEither.get();
        CommonUtil.printThreadLog(str);

在这里插入图片描述

2. acceptEither两个异步任务哪个先返回就处消费哪个异步任务结果,无返回值.

CommonUtil.printThreadLog("main start");
        CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> {
            SecureRandom random = new SecureRandom();
            int x = random.nextInt(3);
            CommonUtil.sleepSecond(x);
            CommonUtil.printThreadLog("耗时: "+x);
            return "result1";
        });
        CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> {
            SecureRandom random = new SecureRandom();
            int x = random.nextInt(3);
            CommonUtil.sleepSecond(x);
            CommonUtil.printThreadLog("耗时: "+x);
            return "result2";
        });

        future1.acceptEither(future2, (res) -> {
            CommonUtil.printThreadLog("最先到达: " + res);
        });
        CommonUtil.printThreadLog("main continue");
        //主线程等任务结束
        CommonUtil.sleepSecond(4);

runAfterEither两个异步任务哪个任务先结束,就会收到一个Runnable通知

CommonUtil.printThreadLog("main start");
        CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> {
            SecureRandom random = new SecureRandom();
            int x = random.nextInt(3);
            CommonUtil.sleepSecond(x);
            CommonUtil.printThreadLog("耗时: "+x);
            return "result1";
        });
        CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> {
            SecureRandom random = new SecureRandom();
            int x = random.nextInt(3);
            CommonUtil.sleepSecond(x);
            CommonUtil.printThreadLog("耗时: "+x);
            return "result2";
        });

        future1.runAfterEither(future2, () -> {
            CommonUtil.printThreadLog("一个任务完成");
        });
        CommonUtil.printThreadLog("main continue");
        CommonUtil.sleepSecond(4);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CompletableFuture使用(五) 的相关文章

  • 按键时关闭 ModalWindow

    我希望能够在用户按下某个键 在我的例子中是 ESC 时关闭 ModalWindow 我有一个用于按键的 Javascript 侦听器 它调用取消按钮 ID 的单击事件 jQuery modalWindowInfo closeButtonId
  • 序列的排列?

    我有具体数量的数字 现在我想以某种方式显示这个序列的所有可能的排列 例如 如果数字数量为3 我想显示 0 0 0 0 0 1 0 0 2 0 1 0 0 1 1 0 1 2 0 2 0 0 2 1 0 2 2 1 0 0 1 0 1 1 0
  • 使用 LinkedList 实现下一个和上一个按钮

    这可能是一个愚蠢的问题 但我很难思考清楚 我编写了一个使用 LinkedList 来移动加载的 MIDI 乐器的方法 我想制作一个下一个和一个上一个按钮 以便每次单击该按钮时都会遍历 LinkedList 如果我硬编码itr next or
  • 在 Jar 文件中运行 ANT build.xml 文件

    我需要使用存储在 jar 文件中的 build xml 文件运行 ANT 构建 该 jar 文件在类路径中可用 是否可以在不分解 jar 文件并将 build xml 保存到本地目录的情况下做到这一点 如果是的话我该怎么办呢 Update
  • 如何更改javaFX中按钮的图像?

    我正在使用javaFX 我制作了一个按钮并为此设置了图像 代码是 Image playI new Image file c Users Farhad Desktop icons play2 jpg ImageView iv1 new Ima
  • 谷歌应用程序引擎会话

    什么是java应用程序引擎 默认会话超时 如果我们将会话超时设置为非常非常长的时间 会不会产生不良影响 因为谷歌应用程序引擎会话默认情况下仅存储在数据存储中 就像facebook一样 每次访问该页面时 会话仍然永远存在 默认会话超时设置为
  • 无法创建请求的服务[org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]-MySQL

    我是 Hibernate 的新手 我目前正在使用 Spring boot 框架并尝试通过 hibernate 创建数据库表 我知道以前也问过同样的问题 但我似乎无法根据我的环境找出如何修复错误 休眠配置文件
  • 帮助将图像从 Servlet 获取到 JSP 页面 [重复]

    这个问题在这里已经有答案了 我目前必须生成一个显示字符串文本的图像 我需要在 Servlet 上制作此图像 然后以某种方式将图像传递到 JSP 页面 以便它可以显示它 我试图避免保存图像 而是以某种方式将图像流式传输到 JSP 自从我开始寻
  • jdbc mysql loginTimeout 不起作用

    有人可以解释一下为什么下面的程序在 3 秒后超时 因为我将其设置为在 3 秒后超时 12秒 我特意关闭了mysql服务器来测试mysql服务器无法访问的这种场景 import java sql Connection import java
  • volatile、final 和synchronized 安全发布的区别

    给定一个带有变量 x 的 A 类 变量 x 在类构造函数中设置 A x 77 我们想将 x 发布到其他线程 考虑以下 3 种变量 x 线程安全 发布的情况 1 x is final 2 x is volatile 3 x 设定为同步块 sy
  • Spring Boot Data JPA 从存储过程接收多个输出参数

    我尝试通过 Spring Boot Data JPA v2 2 6 调用具有多个输出参数的存储过程 但收到错误 DEBUG http nio 8080 exec 1 org hibernate engine jdbc spi SqlStat
  • Eclipse 选项卡宽度不变

    我浏览了一些与此相关的帖子 但它们似乎并不能帮助我解决我的问题 我有一个项目 其中 java 文件以 2 个空格的宽度缩进 我想将所有内容更改为 4 空格宽度 我尝试了 正确的缩进 选项 但当我将几行修改为 4 空格缩进时 它只是将所有内容
  • Cucumber 0.4.3 (cuke4duke) 与 java + maven gem 问题

    我最近开始为 Cucumber 安装一个示例项目 并尝试使用 maven java 运行它 我遵循了这个指南 http www goodercode com wp using cucumber tests with maven and ja
  • 最新的 Hibernate 和 Derby:无法建立 JDBC 连接

    我正在尝试创建一个使用 Hibernate 连接到 Derby 数据库的准系统项目 我正在使用 Hibernate 和 Derby 的最新版本 但我得到的是通用的Unable to make JDBC Connection error 这是
  • Eclipse 启动时崩溃;退出代码=13

    I am trying to work with Eclipse Helios on my x64 machine Im pretty sure now that this problem could occur with any ecli
  • 如何使用mockito模拟构建器

    我有一个建造者 class Builder private String name private String address public Builder setName String name this name name retur
  • 包 javax.el 不存在

    我正在使用 jre6 eclipse 并导入 javax el 错误 包 javax el 不存在 javac 导入 javax el 过来 这不应该是java的一部分吗 谁能告诉我为什么会这样 谢谢 米 EL 统一表达语言 是 Java
  • 使用反射覆盖最终静态字段是否有限制?

    在我的一些单元测试中 我在最终静态字段上的反射中遇到了奇怪的行为 下面是说明我的问题的示例 我有一个基本的 Singleton 类 其中包含一个 Integer public class BasicHolder private static
  • 使用 CXF-RS 组件时,为什么我们使用 而不是普通的

    作为后续这个问题 https stackoverflow com questions 20598199 对于如何正确使用CXF RS组件我还是有点困惑 我很困惑为什么我们需要
  • 如何防止在Spring Boot单元测试中执行import.sql

    我的类路径中有一个 import sql 文件 其中包含一些 INSERT 语句 当使用 profile devel 运行我的应用程序时 它的数据被加载到 postgres 数据库中 到目前为止一切正常 当使用测试配置文件执行测试时 imp

随机推荐

  • Vue锚链接(两种方法) scrollIntoView

    第一种 常见 锚链接 id和 href 结合起来 div style height 300px 第一 div div style height 300px 第二 div a href one 回到第一 a a href two 回到第二 a
  • 直流电源_滤波电路

    目录 前言 电容滤波电路 1 滤波原理 2 输出电压平均值 3 脉动系数 4 整流二极管的导通角 5 电容滤波电路的输出特性和滤波特性 倍压整流电路 其他形式的滤波电路 1 电感滤波电路 2 复式滤波电路 3 各种滤波电路的比较 前言 整流
  • 较好用的html5编译器

    一 BlueGriffon 基于 Firefox 渲染引擎的下一代 Web 和 EPUB 编辑器 链接 BlueGriffon 二 Aloha Editor 基于 所见即所得 的原则 HTML5 编辑器可以直接在门户网站上编辑网站 快速 简
  • 计算方法--解线性方程组的直接法

    文章目录 一 Gauss 消元法 1 顺序高斯消元法 总计算量 2 主元素高斯消元法 列主元素高斯消元法 3 高斯 约当 Gauss Jordan 消去法 总计算量 二 矩阵三角分解法 1 直接三角分解法 LU分解 Doolittle分解
  • WIN10安装后必做的优化,解决卡顿问题

    WIN10安装后必做的优化 解决卡顿问题
  • 储存过程之拉链表

    很多做数仓的朋友在面试的时候都会被问到 你写过的最难的存储过程是什么 这时候我们都会想到拉链表 拉链表真的那么难吗 下面我简单介绍一下拉链表作用 以及制作思路 希望可以帮到你 拉链表的作用 数据进行增量或者全量同步时 我们希望保留少数字段历
  • ELF文件格式的详解

    1 说明 2 elf文件的基本格式 3 elf文件的头部信息 4 elf文件的节区 Section 4 1 节区的作用 4 2 节区的组成 5 elf文件的段 Segment 6 用python解析elf文件 7 总结 1 说明 ELF的英
  • 设计模式之中介者模式

    中介者模式包装了一系列对象相互作用的方式 使得这些对象1不必相互明显作用 从而使它们可以松散耦合 当某些对象之间的作用发生改变时 不会立即影响到其他的一些对象之间的作用 保证这些作用可以彼此独立变化 中介者模式将多对多的相互作用转化为一对多
  • C语言函数程序实例(超全)

    目录 1 编写函数fun 功能是 计算n门课程的平均值 计算结果作为函数值返回 例如 若有5门课程的成绩是 92 76 69 58 88 则函数的值为76 599998 2 用函数将一个N阶方阵进行转置 输入输出在主函数中实现 使用for循
  • [QT编程系列-7]:C++图形用户界面编程,QT框架快速入门培训 - 3- QT窗体设计 - 自定义工具栏、状态栏、快捷键、图标

    目录 3 QT窗体设计 3 2 自定义工具栏 3 2 1 目标 3 2 2 实现过程 3 2 自定义状态栏 3 2 1 目标 3 2 2 过程 3 3 自定义动作快捷键 3 4 自定义图标 3 QT窗体设计 3 2 自定义工具栏 在Qt中
  • idea2023搜不到中文插件问题

    idea2023搜不到中文插件 可以考虑下载插件后本地安装 注意先看idea版本号 然后从官网下载离线汉化包 选择的版本等于或者低于idea版本号 1 离线汉化包下载地址 Chinese Simplified Language Pack 中
  • python操作excel(xlrd、xlwt、xlwings、pandas、openpyxl)

    文章目录 一 xlrd库 1 工作簿 book 1 创建工作簿对象 2 工作表 sheet 1 创建工作表对象 3 单元格 range 1 获取单个单元格的值 两种方法 2 获取单行或单列的值 4 获取工作表中的总行列数 二 xlwt库 1
  • JAVA多线程--信号量(Semaphore)

    简介 信号量 Semaphore 有时被称为信号灯 是在多线程环境下使用的一种设施 它负责协调各个线程 以保证它们能够正确 合理的使用公共资源 一个计数信号量 从概念上讲 信号量维护了一个许可集 如有必要 在许可可用前会阻塞每一个 acqu
  • VUE + 微信分享

    cnpm i weixin js sdk save 在需要分享的页面引入 import wx from weixin js sdk import shares from api index 在methods写调用的方法 vue调用微信的自定
  • Idea 代码存在报找不到符号

    前言 话说IDEA这个开发工具已经用了好几个春秋了 没想到最近很是淘气呢 打算撂挑子了 来咱们来整顿一下这淘气的货 问题 Error 191 80 java 找不到符号 符号 方法 getListByParamWithoutPage jav
  • 国家发改委发布《“互联网+”高效物流实施意见》

    国家发展改革委关于印发 互联网 高效物流实施意见 的通知 发改经贸 2016 1647号 国务院有关部委 直属单位 各省 自治区 直辖市及计划单列市人民政府 为贯彻落实 国务院关于积极推进 互联网 行动的指导意见 国发 2015 40号 发
  • #ifdef,#ifndef,#define,#endif解析(原)

    我们在看一些开源的源代码的时候 经常会看到如下情景 if defined PTHREADS defined NOTHREADS define STL PTHREADS endif if defined UITHREADS defined P
  • github上的adminlte下载太慢,下载失败解决办法

    不知道为什么github上的AdminLTE下载特别慢 一直失败 可以到码云上的镜像仓库去下载 码云急速下载
  • USB/UART/I2C/SPI等接口传输速率

    USB UART I2C SPI等接口传输速率 目录 USB总线 UART I2C总线 SPI总线 GPIO RK3399 FMC 参考 USB总线 USB1 1 低速模式 low speed 1 5Mbps 全速模式 full speed
  • CompletableFuture使用(五)

    异步任务交互方法applyToEither acceptEither和runAfterEither的使用介绍 1 applyToEither两个异步任务哪个先返回就处理哪个异步任务结果并返回CompletableFuture Complet