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
个性签名:1.01的365次方=37.78343433289 >>>1
0.99的365次方= 0.02551796445229 <<<1
每天进步一点点的目标,贵在坚持…
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
2018-07-14 IDEA找回Run Dashboard
2018-07-14 IDEA配置常见配置