实在它的方法不算多,源码也才三百多行。大概重要的有下面几个方法:
public final int get() //获取当前的值public final int getAndSet(int newValue)//获取当前的值,并设置新的值public final int getAndIncrement()//获取当前的值,并自增public final int getAndDecrement() //获取当前的值,并自减public final int getAndAdd(int delta) //获取当前的值,并加上预期的值boolean compareAndSet(int expect, int update) //如果输入的数值便是预期值,则以原子方式将该值设置为输入值(update)public final void lazySet(int newValue)//终极设置为newValue,利用 lazySet 设置之后大概导致其他线程在之后的一小段时间内照旧可以读到旧的值。简单先容一下AtomicInteger类的原理
AQS利用一个int成员变量来表现同步状态,而且该变量用volatile修饰了。通过内置的先入先出队列来完成线程的排队工作。AQS利用CAS对同步状态举行原子利用实现对其值的修改。
//返回同步状态的当前值protected final int getState() { return state;}//设置同步状态的值protected final void setState(int newState) { state = newState;}//原子地(CAS利用)将同步状态值设置为给定值update如果当前同步状态的值便是expect(盼望值)protected final boolean compareAndSetState(int expect, int update) { return unsafe.compareAndSwapInt(this, stateOffset, expect, update);}AQS对资源的共享方式