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