java 关于volatile读操作与volatile修饰引用类型变量的问题

你的这个结论不能完全成立,因为这不是虚拟机规范里规定的。不同的虚拟机实现可能是不同的,比如你的代码放在IBM的J9 VM上运行,即使a不被声明为volatile,程序依旧可以结束:
【java 关于volatile读操作与volatile修饰引用类型变量的问题】 java 关于volatile读操作与volatile修饰引用类型变量的问题

红箭头那行代表你的程序执行结束了。
所以你总结的这个规则是不被虚拟机所保证的。

■网友
我非常赞同你的思考角度。各种帖子众说纷纭,各种罗列知识点,还是没有搞清楚volatile前因后果。先说说MESI和volatile啥关系!我的第一个理解是,lock前缀激发了cpu使用mesi协议!(换了角度,如果cpu如果给予mesi直接强一致,那volatile还有毛用)再换个思考,那么sychronized又是如何来解决缓存问题的?
■网友

java 关于volatile读操作与volatile修饰引用类型变量的问题

java 关于volatile读操作与volatile修饰引用类型变量的问题

这是spring源码,源码告诉我们要怎么用,不要惊慌,楼主总结的不错,所以我们应该这么玩volatile


    推荐阅读