package org.fastcatsearch.util; import java.util.concurrent.atomic.AtomicInteger; import org.fastcatsearch.ir.util.Counter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * 호출 갯수를 카운트하기 위한 클래스. * incrementCount로 카운트를 증가시키고, resetCount를 호출하여 갯수를 저장하고 0부터 다시 카운트하기 시작한다. * 비동기적으로 일정주기동안의 합산 갯수를 가져갈때 유용하게 사용될수 있다. * */ public class AsynchronousCounter implements Counter { protected static Logger logger = LoggerFactory.getLogger(AsynchronousCounter.class); private AtomicInteger runningCount; private AtomicInteger storedCount; public AsynchronousCounter(){ runningCount = new AtomicInteger(); storedCount = new AtomicInteger(); } @Override public void incrementCount(){ int c = runningCount.incrementAndGet(); } public void addCount(int count){ runningCount.addAndGet(count); } public int getLastCount(){ return storedCount.intValue(); } //통계를 0으로 만든다. //[0]에는 수치를 계속 더해가고, 주기가 되면 완료된 수치를 [1]로 옮기고 [0]을 0으로 만든다. public int resetCount(){ int count = runningCount.get(); storedCount.lazySet(count); runningCount.set(0); return count; } }