首页 > 解决方案 > 如何获取 FixedPool 中线程的编号 (ID)?

问题描述

我知道 Thread.currentThread().getName() 给了我池名称和池中这个线程的 ID,我怎样才能得到这个数字?

这是我提到的那一行的结果:

池 1 线程 1

我只需要最后一个数字。

标签: javamultithreadingthreadpool

解决方案


当你创建一个ThreadPoolExecutorbyExecutors.newFixedThreadPool时,它会创建一个默认的ThreadFactory并且这个默认ThreadFactory创建Thread的名字是 like pool-x-thread-y

您可以自定义 aThreadFactory并使用它构建线程池:

class NumberThreadFactory implements ThreadFactory {        
    int count = 0;
    public Thread newThread(Runnable r) {
        return new Thread(r, String.valueOf(count++));
    }
}

Executor executor = Executors.newFixedThreadPool(2, new NumberThreadFactory());

executor.execute(() -> System.out.println(Thread.currentThread().getName()));  // 1
executor.execute(() -> System.out.println(Thread.currentThread().getName()));  // 2

推荐阅读