diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/BalancedQueueRpcExecutor.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/BalancedQueueRpcExecutor.java index 40ba9fe..55f0f63 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/BalancedQueueRpcExecutor.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/BalancedQueueRpcExecutor.java @@ -39,7 +39,7 @@ import com.google.common.base.Preconditions; public class BalancedQueueRpcExecutor extends RpcExecutor { protected final List> queues; - private QueueBalancer balancer; + private final QueueBalancer balancer; public BalancedQueueRpcExecutor(final String name, final int handlerCount, final int numQueues, final int maxQueueLength) { @@ -112,16 +112,22 @@ public class BalancedQueueRpcExecutor extends RpcExecutor { * Queue balancer that just randomly selects a queue in the range [0, num queues). */ private static class RandomQueueBalancer extends QueueBalancer { - private int queueSize; - private Random random; + private final int queueSize; + + private final ThreadLocal threadRandom = + new ThreadLocal() { + @Override + protected Random initialValue() { + return new Random(); + } + }; public RandomQueueBalancer(int queueSize) { this.queueSize = queueSize; - this.random = new Random(); } public int getNextQueue() { - return random.nextInt(queueSize); + return threadRandom.get().nextInt(queueSize); } } }