请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

执行引擎使用这个变量前需要从新执行load或assign操作初始化变量的值,不太明白

如果对一个变量执行lock操作,将会清空工作内存中此变量的值,在执行引擎使用这个变量前需要从新执行load或assign操作初始化变量的值

假如加锁后没有执行load,执行assign之后工作内存应该还是用锁之前的值计算之后出来的值啊?
然后在unlock时,再把工作内存的值同步到主内存中,那么不就覆盖了加锁的线程同步到主内存的值了么?
老师这块不太明白

正在回答 回答被采纳积分+3

1回答

Jimin 2019-06-24 22:48:51

你好,根本上来说不存在这种假设,这里的要求属于针对底层实现做的,我们上层调用时是感知不到的,因此也无法在调用时去掉其中某一步。
这个规则是JMM提出的,根本上针对JDK实现时必须遵守这些规则(如果JDK提供的类不遵守这些规则,那么就没任何规则可言了,我们讨论并发等就相当于没了理论依据),有了这些规则,我们在后面做线程安全分析及处理时,才能称得上有理有据。但是上层的类在实现及调用不同,依旧会产生不同的问题,这就需要我们具体了解每个关键字的特性,比如synchronized、volatile。我们再谈论每个关键字或类有某些特性时,其实也是满足了这些基础规则之后的基本扩展,这些规则其实是限制了这些类在编译成机器码时必须是满足JMM要求。

0 回复 有任何疑惑可以回复我~
  • 提问者 anxiouspig #1
    你是说lock一个变量之后,除了主存和加lock的线程之外就不存在这个变量了,其他线程使用这个变量只能去主存取吗?也就不存在lock之后其他线程还能继续assign这个变量是吧。
    回复 有任何疑惑可以回复我~ 2019-06-25 09:57:37
  • 提问者 anxiouspig #2
    还是说加lock的时候,就算assgin到工作内存,也会被清空
    回复 有任何疑惑可以回复我~ 2019-06-25 10:13:21
  • 提问者 anxiouspig #3
    还是说等unload的时候,从新执行read/load操作,可不是不能丢弃assign的值么?
    回复 有任何疑惑可以回复我~ 2019-06-25 10:17:55
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信