如何对线程池创建的线程自定义名称

文章目录


要实现自定义线程池创建的线程名,主要是在线程工厂中重写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号线程正在执行任务...
         * 我在执行创建者给的任务了...
         */
    }

Guess you like

Origin blog.csdn.net/GBS20200720/article/details/121340375