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);