我正在使用ScheduledExecutorService来维护核心大小为10的线程池
ScheduledExecutorService visiblityThreadPool = Executors.newScheduledThreadPool(10);
现在在日志中我将thredName视为 pool-39-thread-3 。
我可以使用3号线,假设线程号从1到10不等,但是如果39号名中的池号怎么样?
这里有39表示什么?请加以说明。
答案 0 :(得分:0)
该字符串是从Thread
初始化的java.util.concurrent.Executors$DefaultThreadFactory
个对象的名称前缀。
/**
* The default thread factory
*/
static class DefaultThreadFactory implements ThreadFactory {
private static final AtomicInteger poolNumber = new AtomicInteger(1);
private final ThreadGroup group;
private final AtomicInteger threadNumber = new AtomicInteger(1);
private final String namePrefix;
DefaultThreadFactory() {
SecurityManager s = System.getSecurityManager();
group = (s != null) ? s.getThreadGroup() :
Thread.currentThread().getThreadGroup();
namePrefix = "pool-" +
poolNumber.getAndIncrement() +
"-thread-";
}
public Thread newThread(Runnable r) {
Thread t = new Thread(group, r,
namePrefix + threadNumber.getAndIncrement(),
0);
if (t.isDaemon())
t.setDaemon(false);
if (t.getPriority() != Thread.NORM_PRIORITY)
t.setPriority(Thread.NORM_PRIORITY);
return t;
}
}
pool-
后面的数字是根据AtomicInteger
字段中存储的static
生成的。每个DefaultThreadFactory
实例都会得到一个“id”,表示在其之前初始化的其他实例数(+1)。
由于ExecutorService
中的大多数Executors
工厂方法都使用此DefaultThreadFactory
,因此您还可以假设此数字表示通过ExecutorService
创建了多少个线程池。