completableFuture
温馨提示:
本文最后更新于 2025年07月19日,已超过 329 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
常用API
| 名字 | 有无返回值 | 是否可以使用自定义线程池 | ||
|---|---|---|---|---|
| runAsync | 无 | 是 | ||
| supplyAsync | 有 | 是 | ||
whenComplete 当上一步结束的时候,会自动执行 此处的代码
exceptionlly 当出现异常时,用来捕获异常
completableFuture 的常用方法
- 获得结果和触发计算
get():不见不散
get(long timeout,TimeUnit unit):过时不候
join():
getNow():获取结果,计算完成,返回计算结果,未完成,则返回 给定值
complete(): 是否打断get方法立即返回括号值。 true 打断get方法,未完成,false 未打断get方法,完成计算。
- 对结果进行处理
thenAppay: 计算结果存在依赖关系,两个线程串行化->当前步骤出错,不继续下一步
handle:计算结果存在依赖关系,两个结果串行化-->有异常的步骤不运算,其他的都进行运算
- 对计算结果进行消费
thenAccept:接收任务的处理结果,并消费处理,无返回结果。任务A执行完执行B,B需要A的结果,B无返回值。
thenRun:任务A执行完执行B,B不需要A的结果。
thenApply:任务A执行完执行B,B需要A的结果,同时B有返回值。
- 对计算速度进行选用
applyToEither:谁快用谁。
使用2个completableFure任务,然后使用 playA.applyToEither(playB,f->{})。此时会使用耗时最短的线程进行运算。
- 对计算结果进行合并
thenComebine:两个任务后完成后,最终一起处理。先完成,需要等待其他任务完成。
CompletableFuture<Integer> completableFuture1 = CompletableFuture.supplyAsync(() -> {
return 1;
});
CompletableFuture<Integer> completableFuture2 = CompletableFuture.supplyAsync(() -> {
return 3;
});
CompletableFuture<Integer> future = completableFuture1.thenCombine(completableFuture2, (v1, v2) -> {
return v1 + v2;
});
System.out.println("--------- future = " + future.join());
completableFurure和线程池
thenRun和thenRunAsync区别
不传入线程池,默认使用 ForkJoin线程池。
传入线程池,thenRun保持上一步骤的线程池,thenRunAsync使用ForkJoin线程池
备注:有可能处理太快,系统优化原则,直接使用main线程处理。
正文到此结束
- 本文标签: Java
- 本文链接: http://119.91.109.247:8443//article/119
- 版权声明: 本文由张亚东原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权