Vai*_*hta 1 java multithreading threadpoolexecutor
根据ThreadPoolExecutor doc(Java ThreadPoolExecutor),如果我像这样创建一个执行器服务:
new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue);
Run Code Online (Sandbox Code Playgroud)
当#threads> corePoolSize时,空闲线程将被终止.当ThreadPoolExecutor杀死任何线程时,我想调用一些特定于应用程序的清理代码.我无法明确这样做.感谢任何帮助.提前致谢.
正确的方法是在run()方法返回后扩展Thread并运行清理代码,如下所示:
BlockingQueue<Runnable> workQueue = new ArrayBlockingQueue<>(50);
ThreadFactory threadFactory = new ThreadFactory() {
@Override
public Thread newThread(Runnable r) {
return new Thread(r) {
@Override
public void run() {
super.run();
//DO YOUR CLEANUP HERE
}
};
}
};
new ThreadPoolExecutor(1, 10, 10, TimeUnit.SECONDS, workQueue, threadFactory);
Run Code Online (Sandbox Code Playgroud)
在你的场景中几乎肯定不会调用中断,因为只有在关闭一个活动的执行程序时才会调用它(即使这样,也不是总是).
通过在运行之后直接调用cleanup,在线程终止之前调用清理代码(线程在runnable的run()方法返回后死亡).