Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么';不是所有的“Executors”工厂方法都封装在“FinalizableDelegatedExecutorService”中吗?_Java_Concurrency - Fatal编程技术网

Java 为什么';不是所有的“Executors”工厂方法都封装在“FinalizableDelegatedExecutorService”中吗?

Java 为什么';不是所有的“Executors”工厂方法都封装在“FinalizableDelegatedExecutorService”中吗?,java,concurrency,Java,Concurrency,返回包装在FinalizableDelegatedExecutorService(非公共)中的文件FinalizableDelegatedExecutorService确保在垃圾收集时关闭线程池 为什么执行者返回的所有ExecutorService没有包装成类似于FinalizableDelegatedExecutorService的东西?如果垃圾被回收,ThreadPoolExecutor是否在没有包装在FinalizableDelegatedExecutorService中的情况下正确关闭?

返回包装在
FinalizableDelegatedExecutorService
(非公共)中的文件
FinalizableDelegatedExecutorService
确保在垃圾收集时关闭线程池


为什么
执行者返回的所有
ExecutorService
没有包装成类似于
FinalizableDelegatedExecutorService
的东西?如果垃圾被回收,
ThreadPoolExecutor
是否在没有包装在
FinalizableDelegatedExecutorService
中的情况下正确关闭?

首先,您不应该首先依赖于终结。因此,人们甚至可以说,它们都不应该被包装起来

无论如何,并非所有由
Executors
工厂方法创建的池都是相同的。有些内核池大小为零,因此没有线程需要清理


类似地,forkjoinpool会在2秒后清理空闲线程,一旦没有线程使其保持活动状态,就可以使用GCable,因此不需要显式终结。

如果不关闭,它仍然保留对其内部线程的引用,这将防止它被垃圾收集。嗯,很有趣。但是,由于正在运行的线程可能会引用回执行器,它会被垃圾收集吗?看。线程不知道包装器,只知道包装的执行器。你可能对这个亚当感兴趣:很好的参考!谢谢