java - 如何重写类对象本身的finalize()方法?

标签 java class java-threads finalize

我的问题很简单。我有一个具有静态 ThreadPoolExecutor 对象的类。因此,该 threadpoolexecutor 对象由该类的所有实例共享。如果我要关闭整个应用程序,共享类对象将被垃圾收集。我希望 threadpoolexecutor 能够通过调用 shutdown 并在此之后调用 awaitTermination 来完成其挂起的作业。这应该在类对象本身的 finalize() 方法中完成。我的问题是:如何重写类对象本身的 Finalize() 方法?这可能吗?

谢谢

最佳答案

finalize() 确实不推荐,因为它不可靠。但是,您可以从使用 JVM ShutdownHooks 中受益。访问钩子(Hook)内的静态池并尝试进行清理。

用法示例:

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();
        }));

    }
}

关于java - 如何重写类对象本身的finalize()方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59794543/

相关文章:

java - 客户端在监听服务器时主动等待

java - KafkaConsumer.close() 为什么?

c# - 如何挂载azure云盘?

java - 将游戏嵌入到标准 Java Web 应用程序中?

java - 除 IMEI 或 IMSI 之外的手机唯一标识符?

c++ - 如何将重载的成员函数作为参数传递?

java - java/android 线程中长的、不可中断的方法的替代方案

java - Apache tomcat + eclipselink下的Servlet

css - 有没有办法限制 html 元素的 css 类?

java - Java 有没有办法让编译器处理互斥的选项?