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"。

这里是Brief ExecutorService Tutorial on Baeldung.