Java的内存模型(JMM模型)
一:定义
1.JMM是在Java在多线程的模式下解决共享数据访问的规范;
2.它屏蔽了各个硬件和操作系统访问的差异;
(JMM 像“统一插座”,不管你插在 Intel、AMD 还是 ARM 的主板上,Java 线程看到/操作的共享变量顺序和可见性规则始终一致,程序员再也不用为不同 CPU 缓存一致性协议或操作系统调度差异写特殊代码)
3.解决了线程间的原子性,可见性和有序性的问题。
二:各个工作区域内的关系
1.所有的共享变量都存储在主内存中
2.每一个线程都有自己的工作内存,且有一个本地变量
3.线程之间的工作内存都不能直接访问
4.线程针对某一个共享变量进行访问的时候,线程不能直接修改主内存中的共享变量,需要把它读取到本地的内存中,才能进行修改,修改完后更新至共享内存
三:现有线程B,想访问线程A中的变量 id
1.线程A读取主内存中的共享id到线程A的本地内存中
2.修改id,并给id值,然后更新到主内存中
3.线程B读取主内存中id的到线程B的本地内存中(这样实现了线程之间的可见性)
1.JMM是在Java在多线程的模式下解决共享数据访问的规范;
2.它屏蔽了各个硬件和操作系统访问的差异;
(JMM 像“统一插座”,不管你插在 Intel、AMD 还是 ARM 的主板上,Java 线程看到/操作的共享变量顺序和可见性规则始终一致,程序员再也不用为不同 CPU 缓存一致性协议或操作系统调度差异写特殊代码)
3.解决了线程间的原子性,可见性和有序性的问题。
二:各个工作区域内的关系
1.所有的共享变量都存储在主内存中
2.每一个线程都有自己的工作内存,且有一个本地变量
3.线程之间的工作内存都不能直接访问
4.线程针对某一个共享变量进行访问的时候,线程不能直接修改主内存中的共享变量,需要把它读取到本地的内存中,才能进行修改,修改完后更新至共享内存
三:现有线程B,想访问线程A中的变量 id
1.线程A读取主内存中的共享id到线程A的本地内存中
2.修改id,并给id值,然后更新到主内存中
3.线程B读取主内存中id的到线程B的本地内存中(这样实现了线程之间的可见性)
全部评论
相关推荐
点赞 评论 收藏
分享
落贝贝:同学,瞅瞅我司,医疗独角兽,校招刚开,名额有限,先到先得,我的主页最新动态,绿灯直达,免笔试~

点赞 评论 收藏
分享