From 2dddad475a2f672521376d8fee488a7c014f3d7f Mon Sep 17 00:00:00 2001 From: "Christopher L. Shannon" Date: Thu, 6 Aug 2026 09:02:50 -0400 Subject: [PATCH] Improve performance of IntSequenceGenerator (#2408) This adopts the same approach as LongSequenceGenerator and uses an Atomic field updater to avoid using synchronized. The sequence generator is used by ResponseCorrelator so the existing tests will catch any errors. See https://issues.apache.org/jira/browse/AMQ-7300 (cherry picked from commit 9c3add11f743ed97b438f2b630a11644e6772443) --- .../activemq/util/IntSequenceGenerator.java | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) 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); } }