CompletableFuture基础用法

特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过。如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/mao2080/

1、问题描述

 在做项目时需要请求多次相同接口,使用串行效率太低,尝试使用并行方式来提高效率。

2、操作步骤

 1、Java代码

复制代码
package com.test;

import lombok.extern.slf4j.Slf4j;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CompletableFuture;

/**
 * @Description
 * @Data 2023/7/14 20:04
 */
@Slf4j
public class CompletableFutureTest {

    public static void main(String[] args) {
        parallel();
        System.out.println("------------------------------");
        serial();
    }

    private static void parallel(){
        long sta = System.currentTimeMillis();
        List<CompletableFuture<String>> futures = new ArrayList<>();
        List<String> versions = Arrays.asList("3.x", "4.x");
        for(String version : versions){
            futures.add(CompletableFuture.supplyAsync(() ->
                    doSomething(version)
            ));
        }
        CompletableFuture[] collect = futures.toArray(new CompletableFuture[futures.size()]);
        CompletableFuture.allOf(collect).join();
        List<String> resList = new ArrayList<>();
        for (CompletableFuture future : collect) {
            try {
                String res = (String) future.get();
                resList.add(res);
            } catch (Exception e) {
                log.error("extractFaceFeature failed:{}", e);
            }
        }
        for(String res : resList){
            log.info(res);
        }
        long cost = (System.currentTimeMillis()-sta);
        log.info("cost:{}", cost);
    }

    private static void serial(){
        long sta = System.currentTimeMillis();
        List<String> versions = Arrays.asList("3.x", "4.x");
        List<String> resList = new ArrayList<>();
        for(String version : versions){
           resList.add(doSomething(version));
        }
        for(String res : resList){
            log.info(res);
        }
        long cost = (System.currentTimeMillis()-sta);
        log.info("cost:{}", cost);
    }

    private static String doSomething(String version){
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return "Success:".concat(version);
    }

}
复制代码

2、运行结果

1
2
3
4
5
6
7
20:35:05.908 [main] INFO com.test.CompletableFutureTest - Success:3.x
20:35:05.910 [main] INFO com.test.CompletableFutureTest - Success:4.x
20:35:05.910 [main] INFO com.test.CompletableFutureTest - cost:5058
------------------------------
20:35:15.931 [main] INFO com.test.CompletableFutureTest - Success:3.x
20:35:15.931 [main] INFO com.test.CompletableFutureTest - Success:4.x
20:35:15.931 [main] INFO com.test.CompletableFutureTest - cost:10019

3、参考网站

https://blog.csdn.net/weixin_43096562/article/details/130635502

posted @   mao2080  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
历史上的今天:
2018-07-14 IDEA找回Run Dashboard
2018-07-14 IDEA配置常见配置
点击右上角即可分享
微信分享提示