synchronized
特性
原子性,可见性,有序性
1.原子性
javap -v Class01_Sync_Test.class
2.可见性
运行在内存中的数据,运行在CPU中的数据。ABA问题
ABA问题.png
ABA问题可以使用volatile来解决
3.有序性
CPU会对指令进行重排序,例如一个对象的创建过程:
申请空间,初始化,赋值给变量。但是如果指令优化成申请空间,赋值给变量,初始化就可能导致另一个线程在使用的时候发现对象内的数据是null的。尤其是在单例模式下。
解决方法:volatile可以保存指令不被优化