Завершение работы ExecutorService в finalize () - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть класс, который управляет кэшем объектов.
Кеш очищается один раз в час через ScheduledExecutorService.
Можно ли отключить ExecutorService с помощью метода class finalize()?

@Override
protected void finalize() throws Throwable {
    EXECUTOR_SERVICE.shutdownNow();
}

Сейчас я работаю на Java 6.

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

В Java нет метода call-this-last. * * * * * * * * * * * * * * * * * * * * * * *

Метод finalize на самом деле является методом "съешь память и, может быть, даже не позвони мне".

Служба ExecutorService имеет shutdown и shutdownNow. Используйте это, но не в методе finalize.

Позвоните shutdown, когда ваше приложение знает, что оно "хочет быстро остановиться". Звоните shutdownNow, когда ваше приложение знает, что оно "хочет остановиться как можно скорее, но, возможно, не сразу".

Невозможно дать * 1013 команду «остановиться сейчас, не ждите».

Вот краткий учебник ExecutorService по Baeldung .

0 голосов
/ 27 апреля 2018

Я рекомендую взглянуть на класс WeakReference, и он используется в качестве финализатора.

Он все еще зависит от вычислений достижимости GC, что означает, что он может быть вызван не сразу, но он избавляет от вероятности появления объектов-зомби и некоторых других проблем, которые мешают завершить шаблон.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...