[jboss-svn-commits] JBL Code SVN: r29843 - labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/coordinator.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Oct 28 05:20:29 EDT 2009


Author: jhalliday
Date: 2009-10-28 05:20:29 -0400 (Wed, 28 Oct 2009)
New Revision: 29843

Modified:
   labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/coordinator/ReaperElement.java
Log:
Use AtomicInteger for biasCounter to reduce lock contention. JBTM-624


Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/coordinator/ReaperElement.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/coordinator/ReaperElement.java	2009-10-28 07:12:30 UTC (rev 29842)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/internal/arjuna/coordinator/ReaperElement.java	2009-10-28 09:20:29 UTC (rev 29843)
@@ -37,6 +37,8 @@
 import com.arjuna.ats.arjuna.coordinator.Reapable;
 import com.arjuna.ats.arjuna.logging.FacilityCode;
 
+import java.util.concurrent.atomic.AtomicInteger;
+
 public class ReaperElement implements Comparable<ReaperElement>
 {
 
@@ -117,16 +119,20 @@
     // bias is used to distinguish/sort instances with the same _absoluteTimeoutMills
     // as using Uid for this purpose is expensive. JBTM-611
 
-    private static int biasCounter = 0;
+    private static int MAX_BIAS = 1000000;
+    private static AtomicInteger biasCounter = new AtomicInteger();
 
-    public static synchronized int getBiasCounter()
+    private static int getBiasCounter()
     {
-        if(biasCounter >= 1000000-1) {
-            biasCounter = 0;
-        } else {
-            biasCounter++;
-        }
-        return biasCounter;
+        int value = 0;
+        do {
+            value = biasCounter.getAndIncrement();
+            if(value == MAX_BIAS) {
+                biasCounter.set(0);
+            }
+        } while(value >= MAX_BIAS);
+
+        return value; // range 0 to MAX_BIAS-1 inclusive.
     }
 
     public int _timeout;



More information about the jboss-svn-commits mailing list