一、前言
关于ehcache-core源码包中net.sf.ehcache.util.counter.Counter、net.sf.ehcache.util.counter.CounterImpl基于java.util.concurrent.atomic.AtomicLong实现并发线程计数器,详情参考源码说明部分。
二、源码说明
1.Counter接口定义
package net.sf.ehcache.util.counter;@b@@b@public abstract interface Counter@b@{@b@ public abstract long increment();@b@@b@ public abstract long decrement();@b@@b@ public abstract long getAndSet(long paramLong);@b@@b@ public abstract long getValue();@b@@b@ public abstract long increment(long paramLong);@b@@b@ public abstract long decrement(long paramLong);@b@@b@ public abstract void setValue(long paramLong);@b@}
2.CounterImpl实现类
package net.sf.ehcache.util.counter;@b@@b@import java.io.Serializable;@b@import java.util.concurrent.atomic.AtomicLong;@b@@b@public class CounterImpl@b@ implements Counter, Serializable@b@{@b@ private AtomicLong value;@b@@b@ public CounterImpl()@b@ {@b@ this(0L);@b@ }@b@@b@ public CounterImpl(long initialValue)@b@ {@b@ this.value = new AtomicLong(initialValue);@b@ }@b@@b@ public long increment()@b@ {@b@ return this.value.incrementAndGet();@b@ }@b@@b@ public long decrement()@b@ {@b@ return this.value.decrementAndGet();@b@ }@b@@b@ public long getAndSet(long newValue)@b@ {@b@ return this.value.getAndSet(newValue);@b@ }@b@@b@ public long getValue()@b@ {@b@ return this.value.get();@b@ }@b@@b@ public long increment(long amount)@b@ {@b@ return this.value.addAndGet(amount);@b@ }@b@@b@ public long decrement(long amount)@b@ {@b@ return this.value.addAndGet(amount * -1L);@b@ }@b@@b@ public void setValue(long newValue)@b@ {@b@ this.value.set(newValue);@b@ }@b@}