Как переопределить метод finalize () самого объекта класса? - PullRequest
0 голосов
/ 17 января 2020

Моя проблема проста. У меня есть класс с объектом stati c ThreadPoolExecutor. Таким образом, этот объект threadpoolexecutor является общим для всех экземпляров класса. Если бы я закрыл все приложение, объект общего класса был бы собран мусором. Я бы хотел, чтобы threadpoolexecutor мог завершить sh ожидающие его работы, вызывая shutdown для него и awaitTermination после этого. Это должно быть сделано в методе finalize() самого объекта класса. Мой вопрос: как мне переопределить метод finalize() самого объекта класса? Это вообще возможно?

Спасибо

1 Ответ

0 голосов
/ 18 января 2020

finalize() действительно не рекомендуется, так как это ненадежно. Однако вы можете воспользоваться JVM ShutdownHooks. Получите доступ к вашему стати c пулу внутри крючка и попробуйте выполнить очистку.

Пример использования:

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

    }
}
...