变量在工作内存中改变了之后,为什么必须同步到主内存中

来源:1-5 JAVA内存模型

慕用2387168

2019-01-22

变量在工作内存中改变了之后,为什么必须同步到主内存中?
对一个变量执行unlock操作之前,必须先把此变量同步到主内存中?

写回答

1回答

Jimin

2019-01-22

你好,首先确认一下,这里是Java内存模型定义的规范,java底层实现时需要遵守。
接下来我们具体说说他为什么要定义这个规范,课程里我们介绍过每个线程都有自己的工作内存,且每个线程之间封闭不可以访问,只能从主内存同步最新数据。这里间接的说明了一点,主内存里的值是实时的、最新的,只要从主内存里获得的值就不用担心有问题。反过来想想如果不是这样,会出现什么问题呢?各个线程都有自己的值,多条线更新主内存,这样一来,各个线程都会用自己的值去覆盖主内存里的值,最终各个线程都不确定自己从内存获取的值是否是最新的了。
这里如果你继续往后面学习,会学到一个关键字volatile,他会保证修饰的变量每次读操作时都保持和主内存里当前值一致,这样的前提也是主内存是最准确的,任何一个线程修改当前线程都能同步到,这样在并发场景下可以用来解决许多问题。

0
0

Java高并发编程,构建并发知识体系,提升面试成功率

构建完整并发与高并发知识体系,倍增高薪面试成功率!

3923 学习 · 832 问题

查看课程