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