异步编程CompletableFuture的一些使用demo
public static ThreadPoolExecutor executor=new ThreadPoolExecutor(5,5,5L, TimeUnit.SECONDS,new LinkedBlockingQueue<>(1000),new ThreadPoolExecutor.CallerRunsPolicy()); public static void main(String[] args) throws Exception { CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> { log.info(">>>>>>>>>>>先执行这个 并且设置返回值"); return 10/2; }, executor); CompletableFuture<Void> future1 = CompletableFuture.runAsync(() -> { log.info(">>>>>>>>>>>这个没有返回值的"); }, executor); CompletableFuture<Void> future2 = future.thenAcceptAsync((res) -> { log.info(">>>>>>>>>>>这个是在future执行完后执行这个, res 就是 future 执行的结果:{}", res); log.info(">>>>>>>>>>>这个没有返回值"); },executor); CompletableFuture<String> future3 = future.thenApplyAsync((res) -> { log.info(">>>>>>>>>>>> 这个也是在future 执行完后执行,res也是future 执行的结果:{} ",res); log.info(">>>>>>>>>>这个是可以有返回值的"); return "1"; },executor); //等待所有任务执行完成 因为future2 是在future 完成之后执行的 所以这个 future 没必要放进去 CompletableFuture.allOf(future1,future2,future3).get(); //只要有一个完成就可以 // CompletableFuture.anyOf(future1,future2,future3).get(); System.out.println(future3.get()); }
如果是for循环里面执行的 可以这样写
List<CompletableFuture<Void>> futures = new LinkedList<>(); for (int i = 1; i <= pageTotal; i++) { CompletableFuture<Void> future1 = CompletableFuture.runAsync(() -> { }, executor); futures.add(future1); } //等待所有执行完成 CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()])).join();
-----------------------有任何问题可以在评论区评论,也可以私信我,我看到的话会进行回复,欢迎大家指教------------------------
(蓝奏云官网有些地址失效了,需要把请求地址lanzous改成lanzoux才可以)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了