Обратный вызов Java ExecutorService при завершении потока
Я использую кешированный пул потоков ExecutorService для запуска некоторых асинхронных фоновых задач. Я предоставил свой ThreadFactory, который передает потоки в ExecutorService (когда это необходимо). Мое понимание пула кэшированных потоков заключается в том, что после того, как поток простаивает в течение 60 секунд, он обрабатывается ExecutorService.
Я хочу выполнить некоторую очистку состояния, когда мой поток вот-вот будет завершен. Каков наилучший способ достичь этого? ExecutorService не всегда обеспечивает привязки к жизненному циклу потока.
Я не хочу отключать свой ExecutorService - полезно для запуска задач по мере их появления.
ExecutorService executor = Executors.newCachedThreadPool(new MyThreadFactory());
// Do some work
executor.submit(new MyCallable());
// Need a way for the ExecutorService to notify me when it is about to
// terminate my thread - need to perform some cleanup
Спасибо,
Шреяс
Ответы
Ответ 1
В коде ThreadFactory
создайте экземпляр Thread
, чтобы он выполнял работу try
для работы созданного Runnable
, а затем finally
выполнял вашу очистку. Вот так:
public Thread newThread(final Runnable r) {
Thread t = new Thread() {
public void run() {
try {
r.run();
} finally {
//do cleanup code
}
}
};
return t;
}