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