内存屏障是一种用于控制内存访问顺序的指令。在多核处理器上运行的多线程程序可能会因处理器的乱序执行和缓存一致性问题而导致意外的行为。内存屏障可以用来强制某些操作的顺序,以确保线程间的正确协同。
作用包括:
- 保证写入的可见性:内存屏障可以确保写入一个共享变量的操作在后续的读取操作之前对其他线程可见。
- 禁止重排序:内存屏障可以防止编译器和处理器对指令进行重排序,以维护程序的语义。
在Java中,volatile关键字和synchronized块内部都会插入内存屏障,以确保适当的内存可见性和有序性。
Java规范定义的内存屏障: