AtomicInteger
一、API
1、int getAndIncrement()
返回旧值,然后自增
2、int incrementAndGet()
自增,然后返回新值
3、int getAndDecrement()
返回旧值,然后自减
4、int decrementAndGet()
自减,然后返回新值
5、boolean compareAndSet(int expect, int update)
expect:旧值 update:新值
6、int getAndAdd(int delta)
返回旧值,然后旧值+delta
7、int addAndGet(int delta)
旧值+delta,然后返回新值
8、int getAndUpdate(IntUnaryOperator updateFunction)
IntUnaryOperator:函数式接口,function类型,入参是旧值
返回旧值,然后接口返回值为新值
9、int updateAndGet(IntUnaryOperator updateFunction)
返回新值
10、int getAndAccumulate(int x, IntBinaryOperator accumulatorFunction)
x:delta值 IntBinaryOperator:两个入参,一个返回值,第一个参数是旧值,第二个参数是delta值
返回旧值,接口返回值为新值
11、int accumulateAndGet(int x, IntBinaryOperator accumulatorFunction)
返回新值
12、 void set(int newValue)、void lazySet(int newValue)
一个有volatile的可见性语义,一个没有
二、源码



由于更下一层是JDK源码的C++代码,暂时超出能力范围,不过这个方法其实就是CAS算法的实现,或者应该说是硬件指令CAS在Java层面的一种体现?
CAS体现了一种乐观思想,期望值相等,就更新,不然就不更新,它总认为旧值不会被改变的概率更大一点,它往往跟自旋一起使用



浙公网安备 33010602011771号