为什么所有`Executors`工厂方法都没有包含在`FinalizableDelegatedExecutorService`中?

时间:2016-01-28 14:03:28

标签: java concurrency

Executors#newSingleThreadExecutor()会返回FinalizableDelegatedExecutorService中包含的ThreadPoolExecutor(非公开)。 FinalizableDelegatedExecutorService确保在收集垃圾时关闭线程池。

为什么ExecutorService返回的所有Executors都包含在FinalizableDelegatedExecutorService之类的内容中?如果收集了垃圾,ThreadPoolExecutor是否正确关闭,而不会被FinalizableDelegatedExecutorService包裹?

1 个答案:

答案 0 :(得分:0)

首先,您不应该首先依赖于最终确定。所以人们甚至可以争辩说它们都不应该被包裹起来。

无论如何,Executors工厂方法创建的所有池都不一样。一些核心池大小为零,因此没有线程可以清理。

类似地,forkjoinpool在2秒后清除空闲线程,并且一旦没有线程保持活动就变为GCable,因此不需要显式终结。