diff --git a/activemq-client/src/main/java/org/apache/activemq/util/IntSequenceGenerator.java b/activemq-client/src/main/java/org/apache/activemq/util/IntSequenceGenerator.java index cbfbff72fda..fe3c7bc2463 100644 --- a/activemq-client/src/main/java/org/apache/activemq/util/IntSequenceGenerator.java +++ b/activemq-client/src/main/java/org/apache/activemq/util/IntSequenceGenerator.java @@ -16,19 +16,24 @@ */ package org.apache.activemq.util; +import java.util.concurrent.atomic.AtomicIntegerFieldUpdater; + public class IntSequenceGenerator { - private int lastSequenceId; + private static final AtomicIntegerFieldUpdater SEQUENCE_UPDATER = + AtomicIntegerFieldUpdater.newUpdater(IntSequenceGenerator.class, "lastSequenceId"); + + private volatile int lastSequenceId; - public synchronized int getNextSequenceId() { - return ++lastSequenceId; + public int getNextSequenceId() { + return SEQUENCE_UPDATER.incrementAndGet(this); } - public synchronized int getLastSequenceId() { + public int getLastSequenceId() { return lastSequenceId; } - public synchronized void setLastSequenceId(int l) { - lastSequenceId = l; + public void setLastSequenceId(int l) { + SEQUENCE_UPDATER.set(this, l); } }