首页 > 解决方案 > 为什么 CompletableFuture.runAsync() 并不总是提交给 ForkJoinPool.commonPool()?

问题描述

CompletableFuture.runAsync文件指出:

ForkJoinPool.commonPool()返回一个新的 CompletableFuture,它由在运行给定操作之后运行的任务异步完成。

但是,据我所知,只向whenrunAsync提交任务。如果没有,它会为每个提交的任务手动创建一个新的。ForkJoinPool.commonPool()ForkJoinPool.getCommonPoolParallelism() > 1Thread

为什么会这样呢?

标签: javamultithreadingasynchronouscompletable-futureforkjoinpool

解决方案


是的,如果 ForkJoinPool 并行度小于 2,那么这里会为每个任务创建新线程

所有没有显式 Executor 参数的异步方法都使用 ForkJoinPool.commonPool() 执行(除非它不支持至少两个并行级别,在这种情况下,会创建一个新线程来运行每个任务)。


推荐阅读