1.Volatile
保持线程可见性
- MESI CPU的缓存一致性协议
防止指令重排
- 单例模式双重检查时,可能会出现指令重排序 要加volatile
- (1)申请内存 赋默认值 0 null
- (2)赋初始值 xx obj
- (3)instance 指针指向内存地址
volatile不能保证原子性 不能替代synchronized
object作为一个锁的对象,如果属性发生改变,不影响锁的使用。
如果object变为其他对象,则锁定的对象发生改变 final Object object = new Object;
AtomicInteger 原子性的Integer – CAS
CAS
Compare And Swap
ABA问题