14

キャッシュされたスレッドプールExecutorServiceを使用して、非同期のバックグラウンドタスクを実行しています。スレッドをExecutorServiceに渡すThreadFactoryを提供しました(必要なときはいつでも)。キャッシュされたスレッドプールについての私の理解は、スレッドが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

ありがとう、

シュレヤス

4

1 に答える 1

14

ThreadFactoryコードで、作成された作業を実行するThreadようにインスタンスを作成してから、クリーンアップ作業を実行します。このような:tryRunnablefinally

public Thread newThread(final Runnable r) {
    Thread t = new Thread() {
        public void run() {
            try {
                r.run();
            } finally {
                //do cleanup code
            }
        }
    };
    return t;
}
于 2011-05-02T21:40:21.843 に答える