Get rid of unnecessary synchronization. This is a contention point when we have lots of threads.
--
MOS_MIGRATED_REVID=101485204
diff --git a/src/main/java/com/google/devtools/build/lib/shell/Consumers.java b/src/main/java/com/google/devtools/build/lib/shell/Consumers.java
index 3ed5b7e..2e548f6 100644
--- a/src/main/java/com/google/devtools/build/lib/shell/Consumers.java
+++ b/src/main/java/com/google/devtools/build/lib/shell/Consumers.java
@@ -23,6 +23,7 @@
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.atomic.AtomicInteger;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -274,18 +275,14 @@
private static final int THREAD_STACK_SIZE = 32 * 1024;
- private static int threadInitNumber;
-
- private static synchronized int nextThreadNum() {
- return threadInitNumber++;
- }
+ private static AtomicInteger threadInitNumber = new AtomicInteger(0);
@Override
public Thread newThread(final Runnable runnable) {
final Thread t =
new Thread(null,
runnable,
- "Command-Accumulator-Thread-" + nextThreadNum(),
+ "Command-Accumulator-Thread-" + threadInitNumber.getAndIncrement(),
THREAD_STACK_SIZE);
// Don't let this thread hold up JVM exit
t.setDaemon(true);