Обратный вызов 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;
}