采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
如果对一个变量执行lock操作,将会清空工作内存中此变量的值,在执行引擎使用这个变量前需要从新执行load或assign操作初始化变量的值
假如加锁后没有执行load,执行assign之后工作内存应该还是用锁之前的值计算之后出来的值啊? 然后在unlock时,再把工作内存的值同步到主内存中,那么不就覆盖了加锁的线程同步到主内存的值了么? 老师这块不太明白
你好,根本上来说不存在这种假设,这里的要求属于针对底层实现做的,我们上层调用时是感知不到的,因此也无法在调用时去掉其中某一步。这个规则是JMM提出的,根本上针对JDK实现时必须遵守这些规则(如果JDK提供的类不遵守这些规则,那么就没任何规则可言了,我们讨论并发等就相当于没了理论依据),有了这些规则,我们在后面做线程安全分析及处理时,才能称得上有理有据。但是上层的类在实现及调用不同,依旧会产生不同的问题,这就需要我们具体了解每个关键字的特性,比如synchronized、volatile。我们再谈论每个关键字或类有某些特性时,其实也是满足了这些基础规则之后的基本扩展,这些规则其实是限制了这些类在编译成机器码时必须是满足JMM要求。
你是说lock一个变量之后,除了主存和加lock的线程之外就不存在这个变量了,其他线程使用这个变量只能去主存取吗?也就不存在lock之后其他线程还能继续assign这个变量是吧。
还是说加lock的时候,就算assgin到工作内存,也会被清空
还是说等unload的时候,从新执行read/load操作,可不是不能丢弃assign的值么?
登录后可查看更多问答,登录/注册
构建完整并发与高并发知识体系,倍增高薪面试成功率!
1.7k 1
1.1k 18
1.2k 15
3.6k 12
1.3k 12