关于JMM和重排序、可见性、原子性之间的逻辑关系的疑问?

来源:13-16 本章重点

慕函数7469937

2020-06-05

老师您好,我想理清一下逻辑关系,您说java内存模型是一组规范,但是实际介绍的重排序,可见性,原子性看起来都是一些性质?特别是重排序可以把他看成是cpu或者编译器本来就固有的属性(这些不是JMM规定的规范吧。。。)。

所以为了理清逻辑我可不可以这样认为,JMM定义了一组规范,正是由于这些规范让我们可以使用java语言中volatile,synchronized等关键字或方法来解决由于硬件或软件本身固有的非可见性,重排序,非原子性这些属性所导致的并发编程结果不一致或不正确问题。有了这些规范(JMM)可以约束从应用层到底层(CPU硬件等)的开发者们,让他们可以保证我们java中的这些关键字可以得到应有的效果。老师您觉得我这样的逻辑正确吗。因为我觉得把JMM规范跟可见性、原子性、重排序这些本身固有的性质画等号或者包含关系有点不符合正常的逻辑?希望老师能回答,谢谢!

写回答

1回答

悟空

2020-06-06

正是JMM的出现,使得cpu的重排序不能随心所欲乱重排序,在重排序后要遵守一定的规则,例如happen-before,这就是JMM在重排序的体系。

是的,可以认为JMM定义了一组规范,正是由于这些规范让我们可以使用java语言中volatile,synchronized等关键字或方法来解决由于硬件或软件本身固有的非可见性,重排序,非原子性这些属性所导致的并发编程结果不一致或不正确问题。

你理解的很对,有了这些规范(JMM)可以约束从应用层到底层(CPU硬件等)的开发者们,让他们可以保证我们java中的这些关键字可以得到应有的效果。


0
1
慕函数7469937
非常感谢!
2020-06-07
共1条回复

线程八大核心+Java并发原理及企业级并发解决方案

完整的并发知识网络+丰富的工作内容分享+50余道并发高频面试题

2512 学习 · 939 问题

查看课程