位置:org.springframework.util
�实现接口:java.io.Serializable
继承类:无
作用:提供定制化创建新线程实例的方法,可作为其他线程工厂类的基类

一、效果

可以通过继承CustomizableThreadCreator来创建需要定制的线程工厂类,生产Thread。

  1. @Test
  2. public void test1(){
  3. MyThreadFactroy mf = new MyThreadFactroy();
  4. mf.setThreadNamePrefix("[线程");
  5. Thread thread1 = mf.createThread(new implRunnable());
  6. Thread thread2 = mf.createThread(new implRunnable());
  7. Thread thread3 = mf.createThread(new implRunnable());
  8. thread1.start();
  9. thread2.start();
  10. thread3.start();
  11. }
  12. class MyThreadFactroy extends CustomizableThreadCreator{}
  13. class implRunnable implements Runnable{
  14. public void run() {
  15. for (int i = 0; i < 5; i++) {
  16. System.out.println(Thread.currentThread().getName() + "]running,count:" + i);
  17. }
  18. }
  19. }
  20. /*
  21. [线程1]running,count:0
  22. [线程2]running,count:0
  23. [线程2]running,count:1
  24. [线程2]running,count:2
  25. [线程3]running,count:0
  26. [线程3]running,count:1
  27. [线程3]running,count:2
  28. [线程3]running,count:3
  29. [线程3]running,count:4
  30. [线程1]running,count:1
  31. [线程1]running,count:2
  32. [线程1]running,count:3
  33. [线程1]running,count:4
  34. [线程2]running,count:3
  35. [线程2]running,count:4
  36. */

二、API

  1. /*
  2. 用于创建新线程的模板方法。
  3. 默认实现使用适当的线程名称为给定的Runnable创建新的线程。
  4. */
  5. public Thread createThread(Runnable runnable) {
  6. Thread thread = new Thread(getThreadGroup(), runnable, nextThreadName());
  7. thread.setPriority(getThreadPriority());
  8. thread.setDaemon(isDaemon());
  9. return thread;
  10. }
  11. // 设置该工厂是否应该创建守护程序线程。
  12. public void setDaemon(boolean daemon) {
  13. this.daemon = daemon;
  14. }
  15. // 指定应该在其中创建线程的线程组。。
  16. public void setThreadGroup(@Nullable ThreadGroup threadGroup) {
  17. this.threadGroup = threadGroup;
  18. }

三、总结

CustomizableThreadCreator提供了基础的线程API,如设置优先级、设置是否为守护进程、设置线程组、设置线程名前缀,在Spring中作为其他线程工厂类的基类。

四、补充

1.什么是守护线程

参见另一篇文章:[Java] 守护线程(Daemon)

2.什么是线程组

参见另一篇文章: [Java] 线程组(ThreadGroup)

3.Thread中run()和start()的区别

  • start()方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行。
  • run()方法当作普通方法的方式调用,程序还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行。