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体现了一种乐观思想,期望值相等,就更新,不然就不更新,它总认为旧值不会被改变的概率更大一点,它往往跟自旋一起使用

 

 

posted @ 2021-01-05 22:55  huang1993  阅读(170)  评论(0)    收藏  举报