You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by vo...@apache.org on 2016/03/01 10:39:12 UTC
[7/9] ignite git commit: ignite-2333 : Improved index calculation
logic.
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 <il...@gridgain.com>
Authored: Thu Feb 25 11:50:13 2016 +0300
Committer: Ilya Lantukh <il...@gridgain.com>
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);
}