Java并发系列(二)Java内存模型

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lwl2014100338/article/details/82810078

Java内存模型

Java线程之间的通信由Java内存模(JMM)型控制,JMM决定一个线程对共享变量的写入何时对另一个线程可见
在这里插入图片描述
线程通信过程
(一)线程A把本地内存A中更新过的共享变量刷新到主内存中
(二)线程B到主内存中去读取线程A之前更新过的共享变量
在这里插入图片描述

指令重排序

(一)编译器优化的重排序
编译器在不改变单线程语义的前提下,可以重新安排语句的执行顺序
(二)指令级并行重排序
如果不存在数据依赖性,处理器可以改变语句对应机器指令的执行顺序
在这里插入图片描述
(三)内存系统的重排序
由于处理器使用缓存和读/写缓存区,这使得加载和存储看上去是乱序的
对于编译器,JMM的编译器重排序规则会禁止特定类型的编译器重排序,
在这里插入图片描述
对于处理器重排序,JMM会要求Java编译器生成指令序列时,插入特定的内存屏障指令来禁止特定类型的处理器重排序

猜你喜欢

转载自blog.csdn.net/lwl2014100338/article/details/82810078