AtomicBoolean、AtomicInteger、AtomicLong这三个类提供的方法几乎一模一样,所以本篇以AtomicInteger为例进行讲解。 AtomicInteger常用的方法如下: get() 获取当前值 set(int newValue) 对当前的原子操作设置新值 getAndSet(int newValue) 设置新值并返回旧值
lazySet(int newValue)
最终会设置成newValue,使用lazySet设置值后,可能导致其他线程在之后的一小段时间内还是可以读到旧值的。关于该方法的更多信息,可参考这篇文章
compareAndSet(int expect, int update) expect表示给定的值,update表示预设置的值,该方法的意思是,用给定的值与AtomicInteger当前的值比较,如果相等,则将当前值更新为update的值。
weakCompareAndSet(int expect, int update) 这个方法和compareAndSet(int expect, int update)方法的内部是一样的,大致意思是: 如果当前值 == 预期值,则以原子方式将该设置为给定的更新值,具体原因还没太明白,可参考这篇博客
getAndIncrement() 对当前值+1,返回的是旧值,类似于i++,先赋值,后+1; getAndDecrement() 对当前值-1,返回的是旧值,类似于i--,先赋值,后-1; getAndAdd(int delta) 将当前的值+delta的值,并返回旧值。 incrementAndGet() 对当前值+1,返回的是+1后的值,类似于++i; decrementAndGet() 对当前值-1,返回的是-1后的值,类似于--i; addAndGet(int delta) 对当前值+delat,并返回相加之后的结果。