在 Java 中, 是一个轻量级的同步机制,主要用于处理多线程并发中的可见性和有序性问题,但它不保证原子性。 要彻底理解 ,我们需要从它解决的三个核心并发特性入手:可见性、有序性和原子性。 --- 一、 的三大特性 1. 保证“可见性”(Visibility) 什么是可见性? 在 Java 内存模型(JMM)中,所有变量都存储在“主内存”中,每个线程都有自己的“工作内存”(本地缓存)。线程读写变量时,会先从主内存拷贝到工作内存,修改后再写回主内存。这就导致一个线程修改了变量,另一个线程可能还在使用自己工作内存中的旧值。 的作用: 当一个变量被声明为 时,它会保证: 写操作:一旦某个线程修改了该变量的值,新值会立即被强制刷新到主内存中。 读操作:任何线程读取该变量时,都会强制使自己工作内存中的缓存失效,直接去主内存中读取最新值。 代码示例(可见性问题): 2. 禁止“指令重排序”保证“有序性”(Ordering) 什么是指令重排序? 编译器和 CPU 为了提高执行效率,在不改变单线程执行结果的前提下,可能会打乱代码的执行顺序。但在多线程环境下,这会导致严重的问题。 的作用: 底层通...