ThreadPoolExecutor的构造函数中,线程的生成有ThreadFactory生成,构造函数中的ThreadFactory默认为Eexecutors.defaultThreadFactory()。 自定义ThreadFactory可以根治线程池究竟何时创建了多少线程,也可以自定义线程的名称、组以及优先级等信息,甚至可以任性的将线程设置为守护线程。总之,自定义ThreadFactory可以更加自由的设置线程池中所有线程的状态。 看个例子吧:
ThreadPoolExecutor executor = newThreadPoolExecutor(5,10, 0L, TimeUnit.MILLISECONDS,
newSynchronousQueue(),
new ThreadFactory() { //自定义ThreadFactory
@Override
public Thread newThread(Runnable r) {
Thread t = new Thread(r);
System.out.println("生成线程 "+t);
return t;
}
});
Runnable r = ()->{
System.out.println(Thread.currentThread().getName()+" 在忙...");
try{
Thread.sleep(100);
}catch(InterruptedException e){
e.printStackTrace();
}
};
for(int i=0;i<10;i++){
executor.submit(r);
}
executor.shutdown();