/** * */ package org.openntf.domino.utils; import java.util.concurrent.atomic.AtomicInteger; /** * The Class Counter. */ class Counter { private final AtomicInteger globalCounter; private final ThreadLocal<AtomicInteger> threadCounter; public Counter(final boolean countPerThread) { if (countPerThread) { globalCounter = null; threadCounter = new ThreadLocal<AtomicInteger>() { @Override protected AtomicInteger initialValue() { return new AtomicInteger(0); } }; } else { globalCounter = new AtomicInteger(0); threadCounter = null; } } /** * Increment. * * @return the int */ public int increment() { if (globalCounter == null) { return threadCounter.get().incrementAndGet(); } else { return globalCounter.incrementAndGet(); } } /** * Decrement. * * @return the int */ public int decrement() { if (globalCounter == null) { return threadCounter.get().decrementAndGet(); } else { return globalCounter.decrementAndGet(); } } /** * read the value * * @return the int value */ public int intValue() { if (globalCounter == null) { return threadCounter.get().intValue(); } else { return globalCounter.intValue(); } } }