1、基本类型

  • AtomicBoolean
  • AtomicInteger
  • AtomicLong

这三个类提供的方法类似,以AtomicInteger位例子:

AtomicInteger分析

  1. public class AtomicInteger extends Number implements java.io.Serializable {
  2. private static final long serialVersionUID = 6214790243416807050L;
  3. // setup to use Unsafe.compareAndSwapInt for updates
  4. private static final Unsafe unsafe = Unsafe.getUnsafe();
  5. private static final long valueOffset;
  6. static {
  7. try {
  8. valueOffset = unsafe.objectFieldOffset
  9. (AtomicInteger.class.getDeclaredField("value"));
  10. } catch (Exception ex) { throw new Error(ex); }
  11. }
  12. //略
  13. private volatile int value;
  14. }

源码可以看出,它依赖于Unsafe类获得对象内存地址访问,偏移量valueOffset代表的该变量值在内存中的偏移地址,从而获取数据的
volatile修饰value来保证多线程内存的可见性
cas可以保证安全修改value的值

getAndIncrement() 将值+1 返回加之前的值
getAndSet(int newValue) 或许旧值,赋给新值
compareAndSet(int expect,int update) 比较旧值,相等就新增。cas
getAndDecrement() 减1返回旧值
getAndAdd(int dalta); 加dalta 返回旧值
incrementAndGet() +1返回新值
decrementAndGer() -1返回新值
addAndGet(int dalta) +dalta 返回新值
getAndUpdate(IntUnaryOperator updateFunction) 使用应用给定函数的结果自动更新当前值,并返回旧值。
UpdateAndGet(IntUnaryOperator updateFunction) 使用应用给定函数的结果自动更新当前值,并返回新值

2、原子更新数组

  • AtomicIntegerArray 原子更新整型数组里的元素
  • AtomicLongArray 长整型数组
  • AtomicReferenceArray 应用类型

    3、原子更新引用类型

  • AtomicReference 引用类型

  • AtomicReferenceFiedUpdater 引用类型里的字段
  • AtomicMarkableReference 带标记的引用类型

    4、原子更新字段类型

  • AtomicIntegerFieldUpdater 整型字段

  • AtomicLongFieldUpdater 长整型字段
  • AtomicStampedReference带有版本号的引用类型