原子性、可见性、有序性,三块东西,都重新从比较细节和底层的层面,都在硬件的级别去给大家说了一下,到底是怎么回事,为什么会发生这个问题,从底层的层面来说了一下,以及大体上有没有什么办法可以来解决这些问题
原子性,基本的赋值写操作都是可以保证原子性的,复杂的操作是无法保证原子性的
可见性,MESI协议、flush、refresh,配合起来,才可以解决可见性
有序性,三个层次,最后一个层次有4种重排(LoadLoad、StoreStore、LoadStore、StoreLoad)
synchronized关键字,同时可以保证原子性、可见性以及有序性的
原子性的层面而言,他加了以后,有一个加锁和释放锁的机制,加锁了之后,同一段代码就只有他可以执行了
可见性,可以保证可见性的,他会通过加入一些内存屏障,他在同步代码块对变量做的写操作,都会在释放锁的时候,全部强制执行flush操作,在进入同步代码块的时候,对变量的读操作,全部会强制执行refresh的操作
更新的数据,别的县城关只要进入代码块,就一定可以读到的
有序性,synchronized关键字,他会通过加各种各样的内存屏障,来保证说,解决LoadLoad、StoreStore等等重排序