2013-03-14 11 views
1

我有一个控制器类,在操作过程中,它使用它执行的执行器来执行任务。如果我只是让gc在超出范围时清理控制器,那么JVM似乎不会死亡。我假设这是因为默认的执行程序不会超时,或者在很长一段时间后超时。Java终结者:一个可接受的用例?

鉴于在控制器仍然可以访问的情况下执行器不应该被关闭,并且在控制器被垃圾收集之后执行器不会被使用,是否可以安全/可接受地使用终结器来使用:

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

我问,因为有关的终结每次讨论似乎归结为,“不除非我不打算详细阐述非常具体的情况下使用。”

回答

2

执行程序不死的原因是该线程不是守护进程线程,因此它保持JVM活着。见Thread.setDaemon(boolean)

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

+0

我不知道这是可能的默认执行者,但仔细检查我看到它允许我指定一个ThreadFactory。谢谢。 – 2013-03-14 06:40:35