我有一个管理对象缓存的类。
缓存每小时通过ScheduledExecutorService清理一次。
可以通过类ExecutorService方法关闭finalize()吗?
@Override
protected void finalize() throws Throwable {
EXECUTOR_SERVICE.shutdownNow();
}我目前正在运行Java 6。
发布于 2018-04-27 18:25:20
Java中没有“调用-这个-最后”方法。finalize方法实际上是一种在Java中“吃-内存-也许-不打电话-我”的方法。
ExecutorService有shutdown和shutdownNow。使用这些,但不能在finalize方法中使用。
当你的应用程序知道它“想要尽快停止”时,就打电话给shutdown。当你的应用程序知道它“想要尽快停止,但可能不是立即停止时,就打电话给shutdownNow。”
没有办法指示ExecutorService“现在停止,不要等待”。
这是一个关于白龙的ExecutorService教程。
发布于 2018-04-27 18:13:42
我建议查看WeakReference类,并将其用作终结器。
它仍然依赖于GC的可达性计算,这意味着它可能不会立即被调用,但是它消除了僵尸对象的可能性以及困扰finalize模式的一些其他问题。
https://stackoverflow.com/questions/50062657
复制相似问题