根据第一条程序次序原则,int i = 1;先行发生于int j = 2;,但是由于处理器优化,可能导致int j = 2;先执行,但是这并不影响先行发生原则的正确性,因为我们在这个线程中并不会感知到这点。
所以,“先行发生”不一定“时间上先发生”。
总结(1)硬件内存架构使得我们必须建立内存模型来保证多线程环境下对共享内存访问的正确性;
(2)Java内存模型定义了保证多线程环境下共享变量一致性的规则;
(3)Java内存模型提供了工作内存与主内存交互的8大操作:lock、unlock、read、load、use、assign、store、write;
(4)Java内存模型对原子性、可见性、有序性提供了一些实现;
(5)先行发生的8大原则:程序次序原则、监视器锁定原则、volatile原则、线程启动原则、线程终止原则、线程中断原则、对象终结原则、传递性原则;
(6)先行发生不等于时间上的先发生;
彩蛋Java内存模型是Java中很重要的概念,理解它非常有助于我们编写多线程代码,理解多线程的本质,笔者这里整理了一些不错的资料提供给大家。
《深入理解Java虚拟机》
《Java并发编程的艺术》
《深入理解java内存模型》
关注我的公众号“彤哥读源码”回复“JMM”领取上面三本书籍。
欢迎关注我的公众号“彤哥读源码”,查看更多源码系列文章,与彤哥一起畅游源码的海洋。