为什么 Java 工作窃取池 (ForkJoinPool) 不支持从线程池中预创建线程?

Why does Java work stealing pool (ForkJoinPool) not support pre-created threads from a thread pool?

Executors.newWorkStealingPool() allows creating a limited concurrency pool with target parallelism. Under the hood, it seems to create a new ForkJoinPool with default worker creation factory which is defined here.

该工厂似乎会创建新线程,直到达到所需的并发数。为什么这个池不允许使用现有池中的线程子集来支持有限的并发性,同时仍然避免每次都创建新线程?我假设在 Java.

中创建线程是昂贵的

相关:Use only a subset of threads in an ExecutorService

Why does this pool not allow using a subset of threads from an existing pool to support limited concurrency while still avoiding creation of new threads everytime?

ThreadThreadFactory API 不允许您回收任意 Thread 对象。问题是 ThreadFactory::newThread 需要实现 return 具有给定 Runnable 的线程,但是 Thread API 只允许 RunnableThread 构造函数设置。

  • Thread 中解决这个问题会破坏模型。 (替换已经启动的线程的Runnable是什么意思。)

  • 理论上可以通过定义 Thread 的子类来修复,其中实际的 run() 方法在循环中运行用户提供的 Runnable。但它变得复杂....你只能回收该子类的实例......而不是任意线程。