Java 执行器线程终止时的服务回调

我正在使用缓存线程池执行器服务来运行一些异步后台任务。我已经提供了我的ThreadFactory,它将线程分发给ExecutorService(只要它需要它们)。我对缓存线程池的理解是,在线程空闲 60 秒后,它被 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

在代码中,创建实例,以便它将执行为其创建的工作,然后执行清理工作。喜欢这个:ThreadFactoryThreadtryRunnablefinally

public Thread newThread(final Runnable r) {
    Thread t = new Thread() {
        public void run() {
            try {
                r.run();
            } finally {
                //do cleanup code
            }
        }
    };
    return t;
}

答案 2