You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rg...@apache.org on 2016/11/16 16:42:30 UTC

svn commit: r1770015 - /qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/QueueConsumerNodeListEntry.java

Author: rgodfrey
Date: Wed Nov 16 16:42:30 2016
New Revision: 1770015

URL: http://svn.apache.org/viewvc?rev=1770015&view=rev
Log:
QPID-7514 : Use field updaters not Atomic instances to reduce construction overhead

Modified:
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/QueueConsumerNodeListEntry.java

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/QueueConsumerNodeListEntry.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/QueueConsumerNodeListEntry.java?rev=1770015&r1=1770014&r2=1770015&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/QueueConsumerNodeListEntry.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/QueueConsumerNodeListEntry.java Wed Nov 16 16:42:30 2016
@@ -20,13 +20,20 @@
  */
 package org.apache.qpid.server.queue;
 
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicReference;
+import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
+import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
 
 final class QueueConsumerNodeListEntry
 {
-    private final AtomicBoolean _deleted = new AtomicBoolean();
-    private final AtomicReference<QueueConsumerNodeListEntry> _next = new AtomicReference<>();
+    private static final AtomicIntegerFieldUpdater<QueueConsumerNodeListEntry> DELETED_UPDATER =
+            AtomicIntegerFieldUpdater.newUpdater(QueueConsumerNodeListEntry.class, "_deleted");
+    @SuppressWarnings("unused")
+    private volatile int _deleted;
+
+    private static final AtomicReferenceFieldUpdater<QueueConsumerNodeListEntry, QueueConsumerNodeListEntry> NEXT_UPDATER =
+            AtomicReferenceFieldUpdater.newUpdater(QueueConsumerNodeListEntry.class, QueueConsumerNodeListEntry.class, "_next");
+    @SuppressWarnings("unused")
+    private volatile QueueConsumerNodeListEntry _next;
 
     private final QueueConsumerNode _queueConsumerNode;
     private final QueueConsumerNodeList _list;
@@ -42,7 +49,7 @@ final class QueueConsumerNodeListEntry
         _list = list;
         //used for sentinel head and dummy node construction
         _queueConsumerNode = null;
-        _deleted.set(true);
+        DELETED_UPDATER.set(this, 1);
     }
 
     public QueueConsumerNode getQueueConsumerNode()
@@ -67,7 +74,7 @@ final class QueueConsumerNodeListEntry
             {
                 //try to move our _next reference forward to the 'newNext'
                 //node to unlink the deleted node
-                _next.compareAndSet(next, newNext);
+                NEXT_UPDATER.compareAndSet(this, next, newNext);
                 next = nextNode();
             }
             else
@@ -88,7 +95,7 @@ final class QueueConsumerNodeListEntry
      */
     protected QueueConsumerNodeListEntry nextNode()
     {
-        return _next.get();
+        return _next;
     }
 
     /**
@@ -99,7 +106,7 @@ final class QueueConsumerNodeListEntry
      */
     boolean setNext(final QueueConsumerNodeListEntry node)
     {
-        return _next.compareAndSet(null, node);
+        return NEXT_UPDATER.compareAndSet(this, null, node);
     }
 
     public void remove()
@@ -109,12 +116,12 @@ final class QueueConsumerNodeListEntry
 
     public boolean isDeleted()
     {
-        return _deleted.get();
+        return _deleted == 1;
     }
 
     boolean setDeleted()
     {
-        return _deleted.compareAndSet(false, true);
+        return DELETED_UPDATER.compareAndSet(this, 0, 1);
     }
 
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org