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、运行结果
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
每天进步一点点的目标,贵在坚持…

浙公网安备 33010602011771号