要实现自定义线程池创建的线程名,主要是在线程工厂中重写newThread()方法
线程工厂
public class TestThreadFactory implements ThreadFactory {
private final String name = "测试%s号线程";
private final AtomicInteger nextId = new AtomicInteger(1);
// 定义线程组名称,在利用 jstack 来排查问题时,非常有帮助
public TestThreadFactory(String whatFeatureOfGroup) {
}
@Override
public Thread newThread(Runnable task) {
String threadName = String.format(name, nextId.toString());
Thread thread = new Thread(task);
thread.setName(threadName);
System.out.println(thread.getName() + "正在执行任务...");
nextId.addAndGet(1);
return thread;
}
}
测试类
@Test
public void test08() {
TestThreadFactory testThreadFactory = new TestThreadFactory("");
testThreadFactory.newThread(new Runnable() {
@Override
public void run() {
System.out.println("我在执行创建者给的任务了...");
}
}).run();
testThreadFactory.newThread(new Runnable() {
@Override
public void run() {
System.out.println("我在执行创建者给的任务了...");
}
}).run();
testThreadFactory.newThread(new Runnable() {
@Override
public void run() {
System.out.println("我在执行创建者给的任务了...");
}
}).run();
/**
* 结果:
* 测试1号线程正在执行任务...
* 我在执行创建者给的任务了...
* 测试2号线程正在执行任务...
* 我在执行创建者给的任务了...
* 测试3号线程正在执行任务...
* 我在执行创建者给的任务了...
*/
}