1
假设我有以下代码,makePool可以被多个线程调用。我正在使用ThreadFactoryBuilder以确保线程具有唯一的名称。TheadFactoryBuilder线程安全生成的ThreadFactory是否安全?
private final ThreadFactory threadFactory = new ThreadFactoryBuilder().setNameFormat(
"MyBusinessClass-%d").build();
public ExecutorService makePool() {
return Executors.newFixedThreadPool(1, threadFactory);
}
或做我必须承担池不是线程安全的,并且必须做一些事情,如:
private static final AtomicLong poolCount = new AtomicLong(0L);
public ExecutorService makePool() {
private final ThreadFactory threadFactory = new ThreadFactoryBuilder().setNameFormat(
"MyBusinessClass- " + poolCount.incrementAndGet() + "-%d").build();
return Executors.newFixedThreadPool(1, threadFactory);
}
如果我提供名称格式,我不认为我使用的是默认线程工厂。 – joseph
检查源代码。我想你正在使用它。只有在ThreadFactoryBuilder对象上调用'setThreadFactory'时,才会使用默认线程工厂。 –
我抬起头来。他们使用一个长计数的原子并在返回的匿名线程工厂中使用它,因此它是线程安全的。请将此参考添加到您的答案中:http://grepcode.com/file/repo1.maven.org/maven2/com.google.guava/guava/10.0.1/com/google/common/util/concurrent/ThreadFactoryBuilder。 java#146 – joseph