Executors.newWorkStealingPool()允许创建具有目标并行度的有限并发池。在幕后,它似乎创建了一个新的 ForkJoinPool ,其中定义了此处定义的默认工作创建工厂。
该工厂似乎会创建新线程,直到达到所需的并发性。为什么这个池不允许使用现有池中的线程子集来支持有限的并发性,同时仍然避免每次都创建新线程?我会假设在 Java 中创建线程是昂贵的。
Executors.newWorkStealingPool()允许创建具有目标并行度的有限并发池。在幕后,它似乎创建了一个新的 ForkJoinPool ,其中定义了此处定义的默认工作创建工厂。
该工厂似乎会创建新线程,直到达到所需的并发性。为什么这个池不允许使用现有池中的线程子集来支持有限的并发性,同时仍然避免每次都创建新线程?我会假设在 Java 中创建线程是昂贵的。
为什么这个池不允许使用现有池中的线程子集来支持有限的并发性,同时仍然避免每次都创建新线程?
和API 不允许您回收任意Thread
对象。问题是需要一个实现来返回一个给定的线程,但API 只允许由构造函数设置。ThreadFactory
Thread
ThreadFactory::newThread
Runnable
Thread
Runnable
Thread
解决这个问题Thread
会破坏模型。Runnable
(替换已经启动的线程是什么意思。)
从理论上讲,它可以通过定义Thread
实际run()
方法在循环中运行用户提供的子类来解决Runnable
。但它变得复杂......你只能回收该子类的实例......而不是任意线程。