Github user clebertsuconic commented on a diff in the pull request: https://github.com/apache/activemq-artemis/pull/1515#discussion_r137426042 --- Diff: artemis-commons/src/main/java/org/apache/activemq/artemis/utils/critical/CriticalMeasure.java --- @@ -17,28 +17,39 @@ package org.apache.activemq.artemis.utils.critical; -import org.jboss.logging.Logger; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicLongFieldUpdater; -public class CriticalMeasure { +final class CriticalMeasure { - private static final Logger logger = Logger.getLogger(CriticalMeasure.class); + //uses updaters to avoid creates many AtomicLong instances + private static final AtomicLongFieldUpdater<CriticalMeasure> TIME_ENTER_UPDATER = AtomicLongFieldUpdater.newUpdater(CriticalMeasure.class, "timeEnter"); + private static final AtomicLongFieldUpdater<CriticalMeasure> TIME_LEFT_UPDATER = AtomicLongFieldUpdater.newUpdater(CriticalMeasure.class, "timeLeft"); - private volatile long timeEnter; - private volatile long timeLeft; + //System::nanoTime can't reach this value so it's the best candidate to have a NULL semantic + private static final long NIL = Long.MAX_VALUE; --- End diff -- just set it to zero like we had before... and all you need is if (timeEnter > timeLeft)
---