在学习Java的JUC框架时,线程池是无法避免的话题,通过线程池的应用,我们能够很大程度上提升性能。那么,在线程池中,ThreadFactory的作用到底是什么呢?
我们来看下ThreadFactory的具体内容:
public interface ThreadFactory {
Thread newThread(Runnable r);
}
可以看到,ThreadFactory中仅含一个方法newThread(Runnable r),顾名思义,也就是依据指定的Runnable接口来创建并返回一个Thread。
也就是说,在线程池中,所有线程的创建都是通过ThreadFactory.newThread方法来完成的。
在创建线程池时,如果不指定ThreadFactory,则程序将为我们提供一个默认的ThreadFactory,也即DeafaultThreadFactory,其内容如下:
static class DefaultThreadFactory implements ThreadFactory {
private static final AtomicInteger poolNumber = new AtomicInteger(1);
private final ThreadGroup group;
private final AtomicInteger threadNumber = new AtomicInteger(1);
private final String namePrefix;
DefaultThreadFactory() {
SecurityManager s = System.getSecurityManager();
group = (s != null) ? s.getThreadGroup() :
Thread.currentThread().getThreadGroup();
namePrefix = "pool-" +
poolNumber.getAndIncrement() +
"-thread-";
}
public Thread newThread(Runnable r) {
Thread t = new Thread(group, r,
namePrefix + threadNumber.getAndIncrement(),
0);
if (t.isDaemon())
t.setDaemon(false);
if (t.getPriority() != Thread.NORM_PRIORITY)
t.setPriority(Thread.NORM_PRIORITY);
return t;
}
}