1、基本类型
- AtomicBoolean
- AtomicInteger
- AtomicLong
这三个类提供的方法类似,以AtomicInteger位例子:
AtomicInteger分析
public class AtomicInteger extends Number implements java.io.Serializable {private static final long serialVersionUID = 6214790243416807050L;// setup to use Unsafe.compareAndSwapInt for updatesprivate static final Unsafe unsafe = Unsafe.getUnsafe();private static final long valueOffset;static {try {valueOffset = unsafe.objectFieldOffset(AtomicInteger.class.getDeclaredField("value"));} catch (Exception ex) { throw new Error(ex); }}//略private volatile int value;}
源码可以看出,它依赖于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) 使用应用给定函数的结果自动更新当前值,并返回新值
