Executors#newSingleThreadExecutor()
会返回FinalizableDelegatedExecutorService
中包含的ThreadPoolExecutor
(非公开)。 FinalizableDelegatedExecutorService
确保在收集垃圾时关闭线程池。
为什么ExecutorService
返回的所有Executors
都包含在FinalizableDelegatedExecutorService
之类的内容中?如果收集了垃圾,ThreadPoolExecutor
是否正确关闭,而不会被FinalizableDelegatedExecutorService
包裹?
答案 0 :(得分:0)
首先,您不应该首先依赖于最终确定。所以人们甚至可以争辩说它们都不应该被包裹起来。
无论如何,Executors
工厂方法创建的所有池都不一样。一些核心池大小为零,因此没有线程可以清理。
类似地,forkjoinpool在2秒后清除空闲线程,并且一旦没有线程保持活动就变为GCable,因此不需要显式终结。