位置:org.springframework.util
�实现接口:java.io.Serializable
继承类:无
作用:提供定制化创建新线程实例的方法,可作为其他线程工厂类的基类
一、效果
可以通过继承CustomizableThreadCreator来创建需要定制的线程工厂类,生产Thread。
@Test
public void test1(){
MyThreadFactroy mf = new MyThreadFactroy();
mf.setThreadNamePrefix("[线程");
Thread thread1 = mf.createThread(new implRunnable());
Thread thread2 = mf.createThread(new implRunnable());
Thread thread3 = mf.createThread(new implRunnable());
thread1.start();
thread2.start();
thread3.start();
}
class MyThreadFactroy extends CustomizableThreadCreator{}
class implRunnable implements Runnable{
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName() + "]running,count:" + i);
}
}
}
/*
[线程1]running,count:0
[线程2]running,count:0
[线程2]running,count:1
[线程2]running,count:2
[线程3]running,count:0
[线程3]running,count:1
[线程3]running,count:2
[线程3]running,count:3
[线程3]running,count:4
[线程1]running,count:1
[线程1]running,count:2
[线程1]running,count:3
[线程1]running,count:4
[线程2]running,count:3
[线程2]running,count:4
*/
二、API
/*
用于创建新线程的模板方法。
默认实现使用适当的线程名称为给定的Runnable创建新的线程。
*/
public Thread createThread(Runnable runnable) {
Thread thread = new Thread(getThreadGroup(), runnable, nextThreadName());
thread.setPriority(getThreadPriority());
thread.setDaemon(isDaemon());
return thread;
}
// 设置该工厂是否应该创建守护程序线程。
public void setDaemon(boolean daemon) {
this.daemon = daemon;
}
// 指定应该在其中创建线程的线程组。。
public void setThreadGroup(@Nullable ThreadGroup threadGroup) {
this.threadGroup = threadGroup;
}
三、总结
CustomizableThreadCreator提供了基础的线程API,如设置优先级、设置是否为守护进程、设置线程组、设置线程名前缀,在Spring中作为其他线程工厂类的基类。
四、补充
1.什么是守护线程
参见另一篇文章:[Java] 守护线程(Daemon)
2.什么是线程组
参见另一篇文章: [Java] 线程组(ThreadGroup)
3.Thread中run()和start()的区别
- start()方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行。
- run()方法当作普通方法的方式调用,程序还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行。