synchronized的三大特征:原子性、有序性、可见性
volatile的两大特征:有序性、可见性
但synchronized和volatile的有序性并不是一回事,很多地方也都没有说清楚。
synchronized
的有序性:是持有相同锁的两个同步块只能串行的进入,即被加锁的内容要按照顺序被多个线程执行,但是其内部的同步代码还是会发生重排序,使块与块之间有序可见。volatile
的有序性:是通过插入内存屏障来保证指令按照顺序执行。不会存在后面的指令跑到前面的指令之前来执行。是保证编译器优化的时候不会让指令乱序。- 转自:synchronized能防止指令重排序吗? - 代码先锋网