如何覆盖 class 对象本身的 finalize() 方法?
How do i override the finalize() method of the class object itself?
我的问题很简单。我有一个 class 有一个静态 ThreadPoolExecutor
对象。因此,这个 threadpoolexecutor 对象被 class 的所有实例共享。如果我要关闭整个应用程序,共享的 class 对象将被垃圾收集。我希望 threadpoolexecutor 能够通过调用 shutdown
并在其后调用 awaitTermination
来完成其待处理的作业。这应该在 class 对象本身的 finalize()
方法中完成。我的问题是:如何覆盖 class 对象本身的 finalize()
方法?这可能吗?
谢谢
finalize()
真的不推荐,因为它不可靠。但是,您可以从使用 JVM ShutdownHooks
中获益。访问挂钩内的静态池并尝试进行清理。
用法示例:
public class ShutdownTest {
static PrintWriter writer = new PrintWriter(System.out);
public static void main(String[] args) throws InterruptedException {
writer.println("Application Started");
writer.flush();
Thread.sleep(2000);
Runtime.getRuntime().addShutdownHook(new Thread(() ->{
writer.println("Application shutdown started");
writer.println("Closing resource");
writer.close();
}));
}
}
我的问题很简单。我有一个 class 有一个静态 ThreadPoolExecutor
对象。因此,这个 threadpoolexecutor 对象被 class 的所有实例共享。如果我要关闭整个应用程序,共享的 class 对象将被垃圾收集。我希望 threadpoolexecutor 能够通过调用 shutdown
并在其后调用 awaitTermination
来完成其待处理的作业。这应该在 class 对象本身的 finalize()
方法中完成。我的问题是:如何覆盖 class 对象本身的 finalize()
方法?这可能吗?
谢谢
finalize()
真的不推荐,因为它不可靠。但是,您可以从使用 JVM ShutdownHooks
中获益。访问挂钩内的静态池并尝试进行清理。
用法示例:
public class ShutdownTest {
static PrintWriter writer = new PrintWriter(System.out);
public static void main(String[] args) throws InterruptedException {
writer.println("Application Started");
writer.flush();
Thread.sleep(2000);
Runtime.getRuntime().addShutdownHook(new Thread(() ->{
writer.println("Application shutdown started");
writer.println("Closing resource");
writer.close();
}));
}
}