第一章:多线程九之ThreadFactory(线程工厂)
2023-10-23 17:15 阿方技术圈 阅读(686) 评论(0) 收藏 举报 package java.util.concurrent;
public interface ThreadFactory {
//唯一的方法:创建一个新线程
Thread newThread(Runnable target);
}
在调用ThreadFactory的唯一方法newThread()创建新线程时,可以更改所创建的新线程的名称、线程组、优先级、守护进程状态等。如果newThread()的返回值为null,表示线程工厂未能成功创建线程,线程池可能无法执行任何任务。使用Executors创建新的线程池时,也可以基于ThreadFactory(线程工厂)创建,在创建新线程池时可以指定将要使用的ThreadFactory实例。只不过,如果没有指定的话,就会使用Executors.defaultThreadFactory默认实例。使用默认的线程工厂实例所创建的线程全部位于同一个ThreadGroup(线程组)中,具有相同的NORM_PRIORITY(优先级为5),而且都是非守护进程状态。
代码示例
package com.heima.multiThread;
import org.junit.Test;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.atomic.AtomicInteger;
public class CreateThreadPoolDemo {
static public class SimpleThreadFactory implements ThreadFactory{
static AtomicInteger threadNo = new AtomicInteger(1);
public Thread newThread(Runnable targert) {
String threadName = "simpleThread-" + threadNo.get();
System.out.println("创建一个线程,名称为:" +threadName);
threadNo.incrementAndGet();
Thread thread = new Thread(targert,threadName);
thread.setDaemon(true);
return thread;
}
}
@Test
public void testThreadFactory(){
ExecutorService pool = Executors.newFixedThreadPool(2,new SimpleThreadFactory());
for (int i =0;i<5;i++){
pool.submit(new ThreadPoolDemo.TargetTask());
}
try {
Thread.sleep(1000);
System.out.println("关闭线程");
pool.shutdown();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
运行结果

浙公网安备 33010602011771号