JMM你可以对比JDBC来理解,我们操作数据库,都是使用JDBC规范的,但是实际JDBC规范都是由各个厂商来自己实现.我们只需要使用JDBC中的相关知识,就可以直接操作数据库.
JMM同理. 定义了一种规范,目的是解决多线程共享和通信问题. 我们使用volatile或者synchronize等关键字,底层是由各个JVM厂商去实现的,你只要知道volatile关键字是干什么的就可以.
可以参照一下 masonwang 的回答.
JMM是一种规范,目的是解决由于多线程通过共享内存进行通信时,存在的本地内存数据不一致、编译器会对代码指令重排序、处理器会对代码乱序执行等带来的问题。
在cpu计算能力飞速发展的情况下,cpu从内存中读取数据已经满足不了cpu的运算速度了,所以需要再引入一层高速缓存来作为内存和处理器之间的缓冲,在Java中,多线程的场景下,系统会为每个线程开辟一个单独的本地内存,同时存在一个存储共享变量的主内存,线程运行时,会将主内存中的数据拷贝到各自的工作内存中,每个工作内存之间对数据的修改是不可见的。使用volatile关键字可是使线程之间的数据修改可见。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。