假设我正在使用
ExecutorService ex = Executors.newFixedThreadPool(nrofthreads);
启动一些工作并等待完成。
但是,我在工作线程中有相同的 Threadlocal 对象,批处理完成后需要关闭它们。 因此,我希望能够对线程池创建的所有工作线程调用自定义关闭方法。
最优雅的方式是什么?
现在我正在使用的黑客:
for(int i =0 ; i<20; i++){ //make sure to touch all threads with 20 runs..
ex.execute(new Runnable(){
public void run(){
tearDownThreadLocals();
}
});
}
ex.shutdown();
但这对我来说看起来并不是特别稳健;-)
谢谢 GJ
最佳答案
您可以使用Executors.newFixedThreadPool(int, ThreadFactory)
通过 ThreadFactory
,像这样:
ExecutorService ex = Executors.newFixedThreadPool(nrofthreads,
new ThreadFactory() {
public Thread newThread(final Runnable r) {
return new Thread(new Runnable() {
public void run() {
try {
r.run();
} finally {
tearDownThreadLocals();
}
}
});
}
});
编辑:刚刚注意到Executors
已经有一个接受 ThreadFactory
的方法,所以不需要创建 ThreadPoolExecutor
明确地。
关于java - 在 Java 线程池中的每个工作线程上调用自定义关闭方法的优雅方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2386096/