1

我有一个控制器类,在其操作过程中,它使用它维护的执行器来执行任务。如果我只是让 gc 在控制器超出范围时清理它,那么 JVM 似乎并没有死。我假设这是因为默认执行程序没有超时,或者在很长一段时间后超时。

鉴于在控制器仍可访问时永远不应该关闭执行器,并且在控制器被垃圾收集后不会使用执行器,使用终结器是否是安全/可接受的使用:

@Override public void finalize() { executor.shutdown(); }

我之所以这么问,是因为每次关于终结器的讨论似乎都归结为“除非非常具体的情况,否则不要使用,我不会详细说明”。

4

1 回答 1

2

executor 没有死的原因是线程不是守护线程,所以它保持 JVM 活着。见Thread.setDaemon(boolean)

现在不是使用终结器的好时机。终结器应该只用于清理本地资源(例如通过 JNI 访问的资源)。

于 2013-03-14T06:32:29.303 回答