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