java - 为什么 CompletableFuture.runAsync() 并不总是提交给 ForkJoinPool.commonPool()?
问题描述
CompletableFuture.runAsync
文件指出:
ForkJoinPool.commonPool()
返回一个新的 CompletableFuture,它由在运行给定操作之后运行的任务异步完成。
但是,据我所知,只向whenrunAsync
提交任务。如果没有,它会为每个提交的任务手动创建一个新的。ForkJoinPool.commonPool()
ForkJoinPool.getCommonPoolParallelism() > 1
Thread
为什么会这样呢?
解决方案
是的,如果 ForkJoinPool 并行度小于 2,那么这里会为每个任务创建新线程
所有没有显式 Executor 参数的异步方法都使用 ForkJoinPool.commonPool() 执行(除非它不支持至少两个并行级别,在这种情况下,会创建一个新线程来运行每个任务)。
推荐阅读
- c# - 资源大小的 UWP 构建问题(.PRI 文件问题)
- javascript - 如何在 html 中隐藏我的 Google Maps API 密钥?
- java - Java Find Closest Pair in Dataset 给出 NullPointerException
- javascript - 将域列入白名单 - 处理 URL 中的尾部斜杠
- bash - sed 在 for 循环中迭代时无法读取可执行文件
- slurm - 将“胖”节点划分为多个 Slurm 节点
- angular - 对 ngx-datatable 列使用角度组件
- java - 如何将 Spring Kafka 消费者收到的 JSON 转换为准备保存在银行中的实体?
- python - Django RecursionError:比较超过最大递归深度
- tensorflow - 模型没有在使用 U-net 的测试数据中泛化