ExecutorService 在 finalize() 中关闭
ExecutorService shutdown in finalize()
我有一个 class 管理对象缓存。
通过 ScheduledExecutorService
.
每小时清理一次缓存
可以通过class finalize()
方法关闭ExecutorService
吗?
@Override
protected void finalize() throws Throwable {
EXECUTOR_SERVICE.shutdownNow();
}
我目前 运行 在 Java 6.
我建议查看 WeakReference class 并将其用作终结器。
它仍然依赖于 GC 的可达性计算,这意味着它可能不会立即被调用,但它消除了僵尸对象的可能性以及困扰最终化模式的一些其他问题。
Java中没有"call-this-last"方法。
finalize
方法实际上是Java中的"eat-memory-and-maybe-don't-even-call-me"方法。
ExecutorService 有 shutdown
和一个 shutdownNow
。
使用这些,
但不是在 finalize
方法中。
当您的应用知道 "wants to stop soonish" 时调用 shutdown
。
当您的应用知道它“想要尽快停止,但可能不会立即停止”时调用 shutdownNow
。
无法将 ExecutorService
指示为 "stop now, don't wait"。
我有一个 class 管理对象缓存。
通过 ScheduledExecutorService
.
每小时清理一次缓存
可以通过class finalize()
方法关闭ExecutorService
吗?
@Override
protected void finalize() throws Throwable {
EXECUTOR_SERVICE.shutdownNow();
}
我目前 运行 在 Java 6.
我建议查看 WeakReference class 并将其用作终结器。
它仍然依赖于 GC 的可达性计算,这意味着它可能不会立即被调用,但它消除了僵尸对象的可能性以及困扰最终化模式的一些其他问题。
Java中没有"call-this-last"方法。
finalize
方法实际上是Java中的"eat-memory-and-maybe-don't-even-call-me"方法。
ExecutorService 有 shutdown
和一个 shutdownNow
。
使用这些,
但不是在 finalize
方法中。
当您的应用知道 "wants to stop soonish" 时调用 shutdown
。
当您的应用知道它“想要尽快停止,但可能不会立即停止”时调用 shutdownNow
。
无法将 ExecutorService
指示为 "stop now, don't wait"。