有序性
synchronized语义表示锁在同一时刻只能由一个线程进行获取,当锁被占用后,其他线程只能等待。因
此,synchronized语义就要求线程在访问读写共享变量时只能“串行”执行,因此synchronized具有有序
性。
在java内存模型中说过,为了性能优化,编译器和处理器会进行指令重排序;也就是说java程序天然的
有序性可以总结为:如果在本线程内观察,所有的操作都是有序的;如果在一个线程观察另一个线程,
所有的操作都是无序的。在单例模式的实现上有一种双重检验锁定的方式(Double-checked
Locking)。
volatile包含禁止指令重排序的语义,其具有有序性。