✅ Java 提供的一种弱同步机制的关键字,确保将变量通知到其他线程
✅ 禁止指令重排序
volatile 修饰的变量不允许线程内部缓存和重排序,修饰变量时,直接实现同步到主存。
MQ源码案例
public abstract class ServiceThread implements Runnable {
private static final InternalLogger log = InternalLoggerFactory.getLogger(RemotingHelper.ROCKETMA_REMOTING);
private static final long JOIN_TIME = 90 * 1000;
protected final Thread thread;
protected volatile boolean hasNotified = false;
protected volatile boolean stopped = false;
}
对多线程应用程序,确保线程安全的规则
对于单个 volatile 变量读写是保证原子性的,对多个volatile变量读写或复合操作不保证原子性
一个线程对共享数据所做的更改对其他线程可见,保证数据一致性
线程之间的操作的有效性