JUC——ThreadFactory线程工厂类(四)
ThreadFactory线程工厂类
在默认情况下如果要想创建一个线程类对象,大部分情况的选择是:直接通过子类为父类进行实例化,利用Runnable子类为Runnable接口实例化。
或者直接调用Lambda表达式来进行处理,不过在多线程运行机制里面考虑到线程对象创建的合理性,juc专门提供了一个ThreadFactory工程程序类。
ThreadFactory定义
package java.util.concurrent; public interface ThreadFactory{ Thread newThread(Runnable r); }
可以看出ThreadFactory只是取得Runnable启动的线程对象做了一个定义而已。
范例:使用ThreadFactory工厂程序类
package so.strong.concurrents; import java.util.concurrent.ThreadFactory; public class StrongDemo { public static void main(String[] args) throws Exception { Thread t = new SimpleThreadFactory().newThread(() -> { for (int x = 0; x < 10; x++) { System.out.println(Thread.currentThread().getName() + "、x = " + x); } }); t.start(); } } class SimpleThreadFactory implements ThreadFactory { private static int count = 0; //进行一个计数的操作 public Thread newThread(Runnable r) { return new Thread(r, "线程 - " + count++); } }
实际上对于接口对象我们一直在说:必须通过工厂类来取得实例化对象,所以对于ThreadFactory的设计看起来虽然多余,但是也符合标准化的设计。