Java ExecutorService обратный вызов в потоке завершается - PullRequest
13 голосов
/ 03 мая 2011

Я использую кешированный пул потоков ExecutorService для выполнения некоторых асинхронных фоновых задач.Я предоставил свой ThreadFactory, который раздает потоки в ExecutorService (когда это необходимо).Насколько я понимаю, кешированный пул потоков заключается в том, что после 60 секунд бездействия потока он терминируется ExecutorService.

Я хочу выполнить некоторую очистку состояния, когда мой поток будет завершен.Каков наилучший способ достичь этого?ExecutorService не позволяет легко подключиться к жизненному циклу потока.

Я не хочу отключать мой ExecutorService - полезно для запуска задач по мере их поступления.1008 *

Shreyas

1 Ответ

14 голосов
/ 03 мая 2011

В вашем коде 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;
}
...