java内存模型,描述了java程序中各类变量(线程共享变量)的访问规则。以及在jvm中将变量存储到内存中读取出变量这样的底层细节。java
规定一:线程对共享变量的全部操做,都是在本身的工做内存中完成,不能直接从主内存中获取。jvm
规定二:不一样线程直接没法直接访问他线程工做内存中的变量,必须经过借助主内存来完成。优化
定义:代码书写的顺序,与执行的顺序不一致,重排序是为了使编译器或处理器更高的效率执行程序。线程
1.编译器优化的重排序(编译器优化)3d
2.指令集并行的重排序(处理器优化)cdn
3.内存系统的重排序(处理器优化)blog
线程1对共享变量的修改想要被线程2及时看到,必须通过以下步骤:排序
JMM关于synchronized的两条规定(保证线程在下次加锁前获取到的数据是最新的):内存
synchronized实现可见性(实现互斥): 步骤一:得到互斥锁。 步骤二:清空工做内存。 步骤三:从主内存中copy最新的变量副本到工做内存。 步骤四: 执行代码。 步骤五:将工做内存中的修改的共享变量同步更新到主内存中。 步骤六:释放互斥锁。编译器
volatile关键字: