ScheduledExecutorService中线程默认名称中池号的java含义
我使用ScheduledExecutorService来维护一个核心大小为10的线程池
ScheduledExecutorService visiblityThreadPool = Executors.newScheduledThreadPool(10);
现在在日志中,我看到thredName为pool-39-thread-3
假设线程数可以在1到10之间变化,我对线程数3没有意见,但是为什么39中的池号会出现在名称中呢
39在这里表示什么?请放点灯
# 1 楼答案
该字符串是从
java.util.concurrent.Executors$DefaultThreadFactory
初始化的Thread
对象的名称前缀这个source code of this class看起来像
因此,
pool-
后面的数字是从存储在static
字段中的AtomicInteger
生成的。每个DefaultThreadFactory
实例都会获得一个排序为“id”的实例,表示在它之前初始化的其他实例的数量(+1)由于
Executors
中的大多数ExecutorService
工厂方法都使用了这个DefaultThreadFactory
,因此您还可以假设这个数字表示通过ExecutorService
创建的线程池的数量