Synchronized vs. Volatile
jmm(java memory model)使所有排序指令happens-before 规则。synchronized 和 volatile 都会使得线程本地缓存失效, 重新从主存取值;在多线程操作下, 会使编译器不能做重排序的优化(遵循happens-before)
二者相同点:
- 保证公共属性值得可见性
这2个的区别:
- synchronized 保证公共属性的可见性和原子性;volatile 则只能保证可见性不能保证原子性, 举个栗子:
|
|