繁体   English   中英

Java终结器:可接受的用例?

[英]Java finalizers: An acceptable use-case?

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

鉴于在控制器仍可访问时永远不要关闭执行器,并且在控制器被垃圾回收之后将不再使用该执行器,因此使用终结器是安全/可接受的:

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

我之所以这样问,是因为每次有关终结器的讨论都可以归结为: “除非我不打算阐述非常具体的情况,否则不要使用。”

执行程序不死的原因是该线程不是守护程序线程,因此可以使JVM保持活动状态。 请参见Thread.setDaemon(boolean)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM