一、ThreadFactory
1.1.源码解读
ThreadFactory这个故名思义,就是一个线程工厂。用来创建线程。这里为什么要使用线程工厂呢?其实就是为了统一在创建线程时设置一些参数,如是否守护线程。线程一些特性等,如优先级。通过这个TreadFactory创建出来的线程能保证有相同的特性。下面来看看它的源码吧
它首先是一个接口类,而且方法只有一个。就是创建一个线程。
publicinterfaceThreadFactory{
ThreadnewThread(Runnabler);
}
在JDK中,有实现ThreadFactory就只有一个地方。而更多的时候,我们都是继承它然后自己来写这个线程工厂的。
下面的代码中在类Executors当中。默认的我们创建线程池时使用的就是这个线程工厂
staticclassDefaultThreadFactoryimplementsThreadFactory{
privatestaticfinalAtomicIntegerpoolNumber=newAtomicInteger(1);//原子类,线程池编号
privatefinalThreadGroupgroup;//线程组
privatefinalAtomicIntegerthreadNumber=newAtomicInteger(1);//线程数目
privatefinalStringnamePrefix;//为每个创建的线程添加的前缀
DefaultThreadFactory(){
SecurityManagers=System.getSecurityManager();
group=(s!=null)?s.getThreadGroup():
Thread.currentThread().getThreadGroup();//取得线程组
namePrefix=pool-+
poolNumber.getAndIncrement()+
-thread-;
}
publicThreadnewThread(Runnabler){
Threadt=newThread(group,r,
namePrefix+threadNumber.getAndIncrement(),
0);//真正创建线程的地方,设置了线程的线程组及线程名
if(t.isDaemon())
t.setDaemon(false);
if(t.getPriority()!=Thread.NORM_PRIORITY)//默认是正常优先级
t.setPriority(Thread.NORM_PRIORITY);
returnt;
}
}
在上面的代码中,可以看到线程池中默认的线程工厂实现是很简单的,它做的事就是统一给线程池中的线程设置线程group、统一的线程前缀名。以及统一的优先级。
1.2.应用实例
下面来看看自己写的一个线程工厂
package治疗白癜风的小偏方有哪些白癜风能否彻底治愈