Angenommen, ich habe den folgenden Code und makePool kann von mehreren Threads aufgerufen werden. Ich verwende ThreadFactoryBuilder, um sicherzustellen, dass die Threads einen eindeutigen Namen haben.Ist die von TheadFactoryBuilder generierte ThreadFactory sicher?
private final ThreadFactory threadFactory = new ThreadFactoryBuilder().setNameFormat(
"MyBusinessClass-%d").build();
public ExecutorService makePool() {
return Executors.newFixedThreadPool(1, threadFactory);
}
oder muss ich den Pool anzunehmen, ist nicht Thread-sicher, und haben so etwas wie zu tun:
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);
}
Ich denke nicht, dass ich die Standard-Thread-Factory verwende, wenn ich ein Namensformat zur Verfügung stelle. – joseph
Überprüfen Sie den Quellcode. Ich denke du benutzt es. Das einzige Szenario, in dem Sie die Standard-Thread-Factory nicht verwenden, ist, wenn Sie 'setThreadFactory' im' ThreadFactoryBuilder'-Objekt aufgerufen haben. –
Ich schaute die Quelle auf. Sie verwenden eine atomare Länge für die Zählung und verwenden diese in der anonymen Thread-Factory, die sie zurückgeben, also ist es threadsicher. Fügen Sie diese Referenz zu Ihrer Antwort hinzu: http://grepcode.com/file/repo1.maven.org/maven2/com.google.guava/guava/10.0.1/com/google/common/util/concurrent/ThreadFactoryBuilder. Java # 146 – joseph