Java 指令重排序相关

Java 指令重排序。

一个非常典型的案例:内存可见性,指令重排序,JIT ,从一个知乎问题谈起

synchronized 可以禁止指令重排序吗

Java synchronized 能防止指令重排序吗? - 知乎

不能,synchronized 包裹起来的代码块中还是可能出现代码重排序,比如双重检验单例模式,如果不加 volatile,就有可能因为重排序可能造成空指针报错。

这里详细讲了:阿里面试:Java的synchronized 能防止指令重排序吗?我犹豫了 - 腾讯云开发者社区-腾讯云

参考资料

  1. 内存可见性,指令重排序,JIT ,从一个知乎问题谈起
  2. 再有人问你volatile是什么,把这篇文章也发给他。
  3. 再有人问你synchronized是什么,就把这篇文章发给他。
  4. Java并发:volatile内存可见性和指令重排
  5. 从JVM并发看CPU内存指令重排序(Memory Reordering)
  6. Dissecting the Disruptor: Demystifying Memory Barriers
  7. Java内存访问重排序的研究 - 美团技术团队
  8. 高并发之volatile、synchronized关键和内存屏障(Memory Barrier) - 掘金