引言

上篇文章我们讲解了Java内存模型和硬件内存架构,Java内存模型中的线程栈和堆可能分别对应硬件架构中的寄存器、缓存和主内存,这使得整个内存交互非常复杂,也会导致可见性和数据竞争问题。这篇文章我们来看Java中的happens-before原则,它指导着Java虚拟机和CPU能怎样对指令进行重排序来获得更好的性能。

Java volatile 可见性保证

Java中的volatile关键字提供了对volatile变量读写的可见性保证,这些可见性保证导致了这些变量从主内存获取或者写回主内存的同步。这些同步使得这些值对其他线程可见。