【Java核心高阶进阶】23-volatile深度剖析
23 | volatile 深度剖析:可见性、有序性与底层实现模块五:Java内存模型与并发基础 · 第 3 篇volatile 是 JMM 留给程序员最轻量的并发工具,但它远不止"保证可见性"那么简单。一、volatile 的两大语义volatile 是 Java 的一个关键字,它为变量提供了两层保证,但刻意不提供第三层。理解这一"提供什么、不提供什么"的边界,是正确使用 volatile 的前提。语义一:可见性对一个 volatile 变量的写,后续任意线程对它的读,都能看到最新值。具体来说:线程写入 volatile 变量后,必须立即将新值刷新到主内存(store + write 立即执行)。线程读取 volatile 变量前,必须从主内存重新加载最新值(read + load 强制执行),使工作内存中的副本失效。这就打破了第 21 篇可见性 demo 中的"读工作内存旧副本"循环。语义二:有序性volatile 禁止了编译器和处理器对相关指令的重排序。但注意,这种禁止是"针对性"的——只针对与 volatile 变量读写有关的操作,不影响 volatile 操作之间没有依赖的普通代码。不提供:原子性volatile 不保证对变量的复合操作