执行引擎使用这个变量前需要从新执行load或assign操作初始化变量的值,不太明白
来源:1-5 JAVA内存模型
![](http://img1.sycdn.imooc.com/user/5a0d7cec0001abc007500750-100-100.jpg)
anxiouspig
2019-06-24
如果对一个变量执行lock操作,将会清空工作内存中此变量的值,在执行引擎使用这个变量前需要从新执行load或assign操作初始化变量的值
假如加锁后没有执行load,执行assign之后工作内存应该还是用锁之前的值计算之后出来的值啊?
然后在unlock时,再把工作内存的值同步到主内存中,那么不就覆盖了加锁的线程同步到主内存的值了么?
老师这块不太明白
写回答
1回答
-
Jimin
2019-06-24
你好,根本上来说不存在这种假设,这里的要求属于针对底层实现做的,我们上层调用时是感知不到的,因此也无法在调用时去掉其中某一步。
这个规则是JMM提出的,根本上针对JDK实现时必须遵守这些规则(如果JDK提供的类不遵守这些规则,那么就没任何规则可言了,我们讨论并发等就相当于没了理论依据),有了这些规则,我们在后面做线程安全分析及处理时,才能称得上有理有据。但是上层的类在实现及调用不同,依旧会产生不同的问题,这就需要我们具体了解每个关键字的特性,比如synchronized、volatile。我们再谈论每个关键字或类有某些特性时,其实也是满足了这些基础规则之后的基本扩展,这些规则其实是限制了这些类在编译成机器码时必须是满足JMM要求。062019-06-25
相似问题