ignite-2333 : Improved index calculation logic.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/dfd026ca Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/dfd026ca Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/dfd026ca Branch: refs/heads/ignite-2333 Commit: dfd026ca7fc31fd3cda08e8f2052118c697ef190 Parents: 46f3f6c Author: Ilya Lantukh <[email protected]> Authored: Thu Feb 25 11:50:13 2016 +0300 Committer: Ilya Lantukh <[email protected]> Committed: Thu Feb 25 11:50:13 2016 +0300 ---------------------------------------------------------------------- .../internal/util/StripedCompositeReadWriteLock.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/dfd026ca/modules/core/src/main/java/org/apache/ignite/internal/util/StripedCompositeReadWriteLock.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/StripedCompositeReadWriteLock.java b/modules/core/src/main/java/org/apache/ignite/internal/util/StripedCompositeReadWriteLock.java index c1e32f5..4acc395 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/util/StripedCompositeReadWriteLock.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/util/StripedCompositeReadWriteLock.java @@ -19,6 +19,7 @@ package org.apache.ignite.internal.util; import org.jetbrains.annotations.NotNull; +import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; @@ -34,6 +35,15 @@ import java.util.concurrent.locks.ReentrantReadWriteLock; public class StripedCompositeReadWriteLock implements ReadWriteLock { /** + * Thread local index generator. + */ + private static final ThreadLocal<Integer> IDX = new ThreadLocal<Integer>() { + @Override protected Integer initialValue() { + return ThreadLocalRandom.current().nextInt(100000); + } + }; + + /** * Locks. */ private final ReentrantReadWriteLock[] locks; @@ -59,7 +69,7 @@ public class StripedCompositeReadWriteLock implements ReadWriteLock { /** {@inheritDoc} */ @NotNull @Override public Lock readLock() { - int idx = (int) Thread.currentThread().getId() % locks.length; + int idx = IDX.get() % locks.length; return locks[idx].readLock(); } @@ -99,7 +109,8 @@ public class StripedCompositeReadWriteLock implements ReadWriteLock { @Override public void lock() { try { lock(false); - } catch (InterruptedException e) { + } + catch (InterruptedException e) { // This should never happen. throw new RuntimeException(e); }
