CompletableFuture的applyToEitherAsync:最快返回输出的线程结果作为下一次任务的输入

简介: CompletableFuture的applyToEitherAsync:最快返回输出的线程结果作为下一次任务的输入applyToEitherAsync和附录1的acceptEitherAsync类似,只是说acceptEitherAsync是对结果的消费,而applyToEitherAsync则是把最快返回的计算输出结果,再利用起来作为下一次线程任务的输入。

CompletableFuture的applyToEitherAsync:最快返回输出的线程结果作为下一次任务的输入

applyToEitherAsync和附录1的acceptEitherAsync类似,只是说acceptEitherAsync是对结果的消费,而applyToEitherAsync则是把最快返回的计算输出结果,再利用起来作为下一次线程任务的输入。

private void test() {
    System.out.println("开始...");

    CompletableFuture.supplyAsync(new Supplier<String>() {
        @Override
        public String get() {
            try {
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            System.out.println("返回 A");
            return "A";
        }
    }).applyToEitherAsync(CompletableFuture.supplyAsync(new Supplier<String>() {
        @Override
        public String get() {
            try {
                TimeUnit.SECONDS.sleep(5);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            System.out.println("返回 B");
            return "B";
        }
    }), new Function<String, Object>() {

        @Override
        public Object apply(String s) {
            return s + " 最快返回";
        }
    }).whenCompleteAsync(new BiConsumer<Object, Throwable>() {
        @Override
        public void accept(Object o, Throwable throwable) {
            System.out.println(o.toString());
        }
    });
}


运行结果输出:

07-02 15:17:41.941 10883-10883/zhangphil.test I/System.out: 开始...
07-02 15:17:42.946 10883-10921/zhangphil.test I/System.out: 返回 A
07-02 15:17:42.949 10883-10943/zhangphil.test I/System.out: A 最快返回
07-02 15:17:46.946 10883-10922/zhangphil.test I/System.out: 返回 B


附:

1,《CompletableFuture的acceptEitherAsync:哪个线程跑的最快用那个》链接:https://blog.csdn.net/zhangphil/article/details/80883953


相关文章
|
1月前
|
算法 调度 索引
什么是多任务和线程?用线程写的一个udp同步聊天器
什么是多任务和线程?用线程写的一个udp同步聊天器
30 0
|
1月前
|
数据采集 存储 Java
「多线程大杀器」Python并发编程利器:ThreadPoolExecutor,让你一次性轻松开启多个线程,秒杀大量任务!
「多线程大杀器」Python并发编程利器:ThreadPoolExecutor,让你一次性轻松开启多个线程,秒杀大量任务!
|
7月前
|
程序员 开发者 Windows
多线程多任务是程序开发者与用户都需要的中资产
多线程多任务是程序开发者与用户都需要的中资产
34 0
|
7月前
|
调度 Python
Python多任务之多线程开发 2
Python多任务之多线程开发
43 0
|
7月前
|
数据采集 Java Python
多线程与多任务异步协程高效爬虫
多线程与多任务异步协程高效爬虫
|
22天前
|
存储 算法 Java
【C/C++ 线程池设计思路】 深入探索线程池设计:任务历史记录的高效管理策略
【C/C++ 线程池设计思路】 深入探索线程池设计:任务历史记录的高效管理策略
68 0
|
12天前
|
Java Spring
定时任务里面的任务多线程操作
该内容是关于Spring Boot中配置异步任务和定时任务的代码示例。首先通过`@Configuration`和`@EnableAsync`开启异步支持,然后定义线程池,如使用`ThreadPoolExecutor`并设置核心线程数、最大线程数等参数。接着,在需要异步执行的方法上添加`@Async`注解。此外,通过`@EnableScheduling`开启定时任务,并使用`@Scheduled`定义具体任务和执行周期。若需指定多个线程池,可以创建不同的`Executor` bean,并在`@Async`中指定线程池名称。
19 2
|
1月前
|
Java
多线程------Future异步任务
多线程------Future异步任务
|
1月前
|
Python
在Python中,如何使用多线程或多进程来实现任务的并行执行?
在Python中,如何使用多线程或多进程来实现任务的并行执行?
145 1
|
7月前
|
安全 Java
深入理解Java单例模式和优化多线程任务处理
深入理解Java单例模式和优化多线程任务处理