【机试题】CompletableFuture编排

news/2024/5/20 9:27:31 标签: java, 开发语言, juc, 任务编排

使用CompletableFuture编排 AService.get()、BService.get()、CService.get(int i) (ABC三个服务返回结果都是int),满足使用A、B的结果相加,再作为参数传给C,取得C的结果后乘以 100 后返回。
要求:
1.显示指定线程池
2.处理异常情况,异常情况返回0

java">

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Main {
    public static void main(String[] args) {
        // 创建一个固定线程池
        ExecutorService executor = Executors.newFixedThreadPool(3);

        CompletableFuture<Integer> future = CompletableFuture
                .supplyAsync(AService::get, executor) // AService.get()在新的线程中执行
                .thenApplyAsync(result1 -> CompletableFuture
                        .supplyAsync(BService::get, executor) // BService.get()在新的线程中执行
                        .thenApply(result2 -> result1 + result2), executor) // A和B的结果相加,还是在新的线程中执行
                .thenApplyAsync(sum -> CompletableFuture
                        .supplyAsync(() -> CService.get(sum), executor) // CService.get()在新的线程中执行
                        .thenApply(result3 -> result3 * 100), executor); // 乘以100,还是在新的线程中执行

        // 如果前面的操作成功,那么这个thenAccept会执行。如果前面的操作失败,这个thenAccept不会执行。
        future.thenAccept(result -> System.out.println("Result: " + result));

        // 关闭线程池,使它不再接受新的任务,但会等待所有提交的任务执行完成才关闭。
        executor.shutdown();
    }
}


http://www.niftyadmin.cn/n/5168255.html

相关文章

iOS开发问题之:AFNetworking 设置header无效

AFNetworking用了这么多年&#xff0c;和后台交互一直都是默认的传值方式&#xff0c;最近新公司要求把参数写在body里面&#xff0c;然后Serializer的时候就遇到了这个问题&#xff0c;在此记录一下。 查询了很久&#xff0c;基本是一样的回答&#xff0c;但是我的header里面…

看农村供水信息化管理系统如何破解供水难题

你是否曾经想过&#xff0c;能够通过一款数字孪生系统平台&#xff0c;解决农村供水的难题&#xff1f;现在&#xff0c;我们带来了这样一款产品&#xff0c;它将为农村供水带来革命性的改变。 我们的农村供水信息化系统&#xff0c;是一款基于数字孪生技术的供水管理平台。它通…

list部分接口模拟实现(c++)

List list简介list基本框架list构造函数list_node结构体的默认构造list类的默认构造 push_back()iteartor迭代器迭代器里面的其他接口const迭代器通过模板参数实现复用operator->() insert()erase()clear()析构函数迭代器区间构造拷贝构造operator() list简介 - list可以在…

【修车案例】一波形一案例(11)

故障车型&#xff1a;2013款宝马320旅行版 故障现象&#xff1a;发动机警告灯亮起&#xff0c;加速无力等&#xff0c;发动机冷却后车辆能够正常运行&#xff0c;直到温度升高&#xff0c;故障重现。 故障码&#xff1a;25D100增压压力传感器对地短路&#xff1b;27F100增压空气…

Ubuntu18.04.6安装qt5.7.1(超级详细教程)

目录 1、下载对应Linux版本的qt 2、安装完qt&#xff0c;可能也要安装下对应的编译工具 1、下载对应Linux版本的qt &#xff08;1&#xff09;准备安装的是qt5.7.1&#xff1a;qt-opensource-linux-x64-5.7.1.run &#xff08;2&#xff09;在虚拟机进入存放qt安装包的目录…

git 简单使用说明

git 是什么&#xff1f; 官方的说法自己去官网查&#xff0c;我只说说我浅薄的看法&#xff1a;git是一款用来协同敲代码的工具&#xff0c;方便一群人一起敲代码。 安装 自己去官网下载&#xff0c;b站也是一堆视频 使用前的准备 1.github新建仓库 当然码云也可以&#x…

伦敦金冬令时开市时间怎样调整

在刚刚过去的一周&#xff0c;欧美的金融市场已经正式进入了冬令时&#xff0c;这对伦敦金市场的交易时间也产生了影响。由于美国于今年11月5日(星期日&#xff09;开始正式实施冬令时间&#xff0c;所以香港的伦敦金平台的交易时间也随之而有所调整。 从今年11月6日开始&#…

Mysql数据库管理---MySQL数据库连接、权限认证

1 mysql系统连接权限认证。 1 mysql数据库权限表在数据库启动时就载入内存&#xff0c;当用户通过身份验证后&#xff0c;就在内存中进行相应权限的存取。系统会用到mysql数据库中3个核心表&#xff1a;user&#xff0c;host&#xff0c;db。 主要包括&#xff1a; 用户列&a…