说我正在使用
ExecutorService ex = Executors.newFixedThreadPool(nrofthreads);
开始做一些工作并等待它完成。
但是我在工作线程中有相同的Threadlocal对象,当批处理完成时需要关闭它们。 因此,我希望能够在线程池创建的所有工作线程上调用自定义close方法。
最优雅的方法是什么?
现在作为我正在使用的黑客:
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
答案 0 :(得分:4)
您可以使用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
。