From 168d581d39a32a3884d9b9fab1548307d6d32590 Mon Sep 17 00:00:00 2001 From: Matteo Merli Date: Thu, 9 Jul 2026 19:21:05 -0700 Subject: [PATCH] Use ThreadLocalRandom for thread selection in OrderedExecutor --- .../org/apache/bookkeeper/common/util/OrderedExecutor.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/bookkeeper-common/src/main/java/org/apache/bookkeeper/common/util/OrderedExecutor.java b/bookkeeper-common/src/main/java/org/apache/bookkeeper/common/util/OrderedExecutor.java index 516581fdb03..f32d25c3ce1 100644 --- a/bookkeeper-common/src/main/java/org/apache/bookkeeper/common/util/OrderedExecutor.java +++ b/bookkeeper-common/src/main/java/org/apache/bookkeeper/common/util/OrderedExecutor.java @@ -28,12 +28,12 @@ import java.util.Collection; import java.util.List; import java.util.Map; -import java.util.Random; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Future; import java.util.concurrent.ThreadFactory; +import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; @@ -65,7 +65,6 @@ public class OrderedExecutor implements ExecutorService { final String name; final ExecutorService[] threads; final long[] threadIds; - final Random rand = new Random(); final OpStatsLogger taskExecutionStats; final OpStatsLogger taskPendingStats; final boolean traceTaskExecution; @@ -545,7 +544,7 @@ public ExecutorService chooseThread() { return threads[0]; } - return threads[rand.nextInt(threads.length)]; + return threads[ThreadLocalRandom.current().nextInt(threads.length)]; } public ExecutorService chooseThread(Object orderingKey) { @@ -555,7 +554,7 @@ public ExecutorService chooseThread(Object orderingKey) { } if (null == orderingKey) { - return threads[rand.nextInt(threads.length)]; + return threads[ThreadLocalRandom.current().nextInt(threads.length)]; } else { return threads[chooseThreadIdx(orderingKey.hashCode(), threads.length)]; }