首页 > 应用开发 > Java > volatile 关键字的作用是什么?
volatile 关键字的作用
在 Java 中,volatile 是一个修饰符,用于声明一个变量在多线程环境中的可见性和防止指令重排序。它可以修饰实例变量和类变量(即成员变量),不能修饰局部变量。
主要作用:
保证变量的可见性:
一个线程对 volatile 变量的修改对于其他线程是立即可见的。
通常,普通变量在一个线程中修改后,另一个线程可能无法立刻看到,因为变量的值可能会被线程缓存,而 volatile 强制线程直接从主内存读取变量值。
禁止指令重排序优化:
volatile 保证被修饰的变量在读写操作时的顺序是按代码中定义的执行顺序。
这种机制确保了变量的赋值操作对其他线程是按预期的顺序执行的,避免了由于编译器优化或 CPU 指令重排序导致的不可预知行为。
使用场景
volatile 适用于以下场景:
状态标志:用于多线程之间的轻量级同步。
单例模式的双重检查锁:避免指令重排序问题。
示例:变量的可见性问题
问题: 多个线程访问一个普通变量,修改值时可能无法立刻被其他线程感知。
class VolatileExample {
private static boolean stop = false;
public static void main(String[] args) throws InterruptedException {
Thread t1 = new Thread(() -> {
while (!stop) {
// 执行一些任务
}
System.out.println("线程结束");
});
t1.start();
Thread.sleep(1000); // 主线程等待1秒
stop = true; // 主线程设置 stop 为 true
}
}
可能的结果: 即使主线程将 stop 设置为 true,线程 t1 可能无法感知到这一变化,导致程序无法正常结束。
解决方案: 使用 volatile 修饰 stop,确保可见性:
class VolatileExample {
private static volatile boolean stop = false;
public static void main(String[] args) throws InterruptedException {
Thread t1 = new Thread(() -> {
while (!stop) {
// 执行一些任务
}
System.out.println("线程结束");
});
t1.start();
Thread.sleep(1000); // 主线程等待1秒
stop = true; // 主线程设置 stop 为 true
}
}
运行结果: 程序能够正常结束,stop 的修改对线程 t1 是立即可见的。
示例:双重检查锁(DCL)与 volatile
问题: 在单例模式的双重检查锁中,指令重排序可能导致返回一个未完全初始化的对象。
class Singleton {
private static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton(); // 可能发生指令重排序
}
}
}
return instance;
}
}
解决方案: 通过 volatile 修饰 instance,禁止指令重排序:
class Singleton {
private static volatile Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
注意事项
不能保证原子性:
volatile 只能保证可见性,不能保证对变量的复合操作(如 i++)的原子性。
如果需要同时保证原子性和可见性,可以使用 synchronized 或 Atomic 类。
适用场景有限:
volatile 适合变量状态的标志性使用。
不适合复杂的状态依赖或需要原子性的操作。
性能开销:
volatile 会导致每次读写都直接操作主内存,相较于线程本地缓存略有性能开销,但比 synchronized 更轻量级。
总结
volatile 的关键作用是:
保证线程间变量的可见性。
禁止指令重排序优化。
它适合解决一些简单的线程同步问题,但对于复杂的并发场景,可能需要结合 synchronized 或其他线程安全机制使用。
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E7%A7%81%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E7%A7%81%E7%B6%B2%E5%90%88%E4%BD%9CVX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E7%A7%81%E7%B6%B2%E5%8C%85%E6%AE%BAVX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E7%A7%81%E7%B6%B2%E6%93%8D%E6%8E%A7VX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E5%81%87%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E5%81%87%E7%B6%B2%E5%90%88%E4%BD%9CVX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E5%81%87%E7%B6%B2%E5%8C%85%E6%AE%BAVX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E5%81%87%E7%B6%B2%E4%B8%80%E6%AF%94%E4%B8%80VX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E5%8C%85%E6%AE%BA%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E5%8C%85%E6%AE%BA%E8%B2%B7%E5%88%86VX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E5%8C%85%E6%AE%BA%E7%B6%B2%E5%90%88%E4%BD%9CVX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A1%E6%AF%941VX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E4%B8%80%E6%AF%94%E4%B8%80VX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A1%E6%AF%941%E7%A7%81%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A1%E6%AF%941%E5%81%87%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E4%B8%80%E6%AF%94%E4%B8%80%E5%90%88%E4%BD%9CVX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E7%A7%81%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E7%A7%81%E7%B6%B2%E5%90%88%E4%BD%9CVX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E7%A7%81%E7%B6%B2%E5%8C%85%E6%AE%BAVX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E7%A7%81%E7%B6%B2%E6%93%8D%E6%8E%A7VX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E5%81%87%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E5%81%87%E7%B6%B2%E5%90%88%E4%BD%9CVX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E5%81%87%E7%B6%B2%E5%8C%85%E6%AE%BAVX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E5%81%87%E7%B6%B2%E4%B8%80%E6%AF%94%E4%B8%80VX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E5%8C%85%E6%AE%BA%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E5%8C%85%E6%AE%BA%E8%B2%B7%E5%88%86VX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E5%8C%85%E6%AE%BA%E7%B6%B2%E5%90%88%E4%BD%9CVX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F1%E6%AF%941VX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E4%B8%80%E6%AF%94%E4%B8%80VX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F1%E6%AF%941%E7%A7%81%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F1%E6%AF%941%E5%81%87%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E4%B8%80%E6%AF%94%E4%B8%80%E5%90%88%E4%BD%9CVX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E7%A7%81%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E7%A7%81%E7%B6%B2%E5%90%88%E4%BD%9CVX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E7%A7%81%E7%B6%B2%E5%8C%85%E6%AE%BAVX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E7%A7%81%E7%B6%B2%E6%93%8D%E6%8E%A7VX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E5%81%87%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E5%81%87%E7%B6%B2%E5%90%88%E4%BD%9CVX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E5%81%87%E7%B6%B2%E5%8C%85%E6%AE%BAVX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E5%81%87%E7%B6%B2%E4%B8%80%E6%AF%94%E4%B8%80VX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E5%8C%85%E6%AE%BA%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E5%8C%85%E6%AE%BA%E8%B2%B7%E5%88%86VX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E5%8C%85%E6%AE%BA%E7%B6%B2%E5%90%88%E4%BD%9CVX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%833601%E6%AF%941VX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E4%B8%80%E6%AF%94%E4%B8%80VX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%833601%E6%AF%941%E7%A7%81%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%833601%E6%AF%941%E5%81%87%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E4%B8%80%E6%AF%94%E4%B8%80%E5%90%88%E4%BD%9CVX%3Aa9685288
https://818ps.com/muban/oubosiwangVXa9685288_1.html
https://818ps.com/muban/oubosiwanghezuoVXa9685288_1.html
https://818ps.com/muban/oubosiwangbaoshaVXa9685288_1.html
https://818ps.com/muban/oubosiwangcaokongVXa9685288_1.html
https://818ps.com/muban/oubojiawangVXa9685288_1.html
https://818ps.com/muban/oubojiawanghezuoVXa9685288_1.html
https://818ps.com/muban/oubojiawangbaoshaVXa9685288_1.html
https://818ps.com/muban/oubojiawangyibiyiVXa9685288_1.html
https://818ps.com/muban/oubobaoshawangVXa9685288_1.html
https://818ps.com/muban/oubobaoshamaifenVXa9685288_1.html
https://818ps.com/muban/oubobaoshawanghezuoVXa9685288_1.html
https://818ps.com/muban/oubo1bi1VXa9685288_1.html
https://818ps.com/muban/ouboyibiyiVXa9685288_1.html
https://818ps.com/muban/oubo1bi1siwangVXa9685288_1.html
https://818ps.com/muban/oubo1bi1jiawangVXa9685288_1.html
https://818ps.com/muban/ouboyibiyihezuoVXa9685288_1.html
https://818ps.com/muban/yaxingsiwangVXa9685288_1.html
https://818ps.com/muban/yaxingsiwanghezuoVXa9685288_1.html
https://818ps.com/muban/yaxingsiwangbaoshaVXa9685288_1.html
https://818ps.com/muban/yaxingsiwangcaokongVXa9685288_1.html
https://818ps.com/muban/yaxingjiawangVXa9685288_1.html
https://818ps.com/muban/yaxingjiawanghezuoVXa9685288_1.html
https://818ps.com/muban/yaxingjiawangbaoshaVXa9685288_1.html
https://818ps.com/muban/yaxingjiawangyibiyiVXa9685288_1.html
https://818ps.com/muban/yaxingbaoshawangVXa9685288_1.html
https://818ps.com/muban/yaxingbaoshamaifenVXa9685288_1.html
https://818ps.com/muban/yaxingbaoshawanghezuoVXa9685288_1.html
https://818ps.com/muban/yaxing1bi1VXa9685288_1.html
https://818ps.com/muban/yaxingyibiyiVXa9685288_1.html
https://818ps.com/muban/yaxing1bi1siwangVXa9685288_1.html
https://818ps.com/muban/yaxing1bi1jiawangVXa9685288_1.html
https://818ps.com/muban/yaxingyibiyihezuoVXa9685288_1.html
https://818ps.com/muban/huanqiu360siwangVXa9685288_1.html
https://818ps.com/muban/huanqiu360siwanghezuoVXa9685288_1.html
https://818ps.com/muban/huanqiu360siwangbaoshaVXa9685288_1.html
https://818ps.com/muban/huanqiu360siwangcaokongVXa9685288_1.html
https://818ps.com/muban/huanqiu360jiawangVXa9685288_1.html
https://818ps.com/muban/huanqiu360jiawanghezuoVXa9685288_1.html
https://818ps.com/muban/huanqiu360jiawangbaoshaVXa9685288_1.html
https://818ps.com/muban/huanqiu360jiawangyibiyiVXa9685288_1.html
https://818ps.com/muban/huanqiu360baoshawangVXa9685288_1.html
https://818ps.com/muban/huanqiu360baoshamaifenVXa9685288_1.html
https://818ps.com/muban/huanqiu360baoshawanghezuoVXa9685288_1.html
https://818ps.com/muban/huanqiu3601bi1VXa9685288_1.html
https://818ps.com/muban/huanqiu360yibiyiVXa9685288_1.html
https://818ps.com/muban/huanqiu3601bi1siwangVXa9685288_1.html
https://818ps.com/muban/huanqiu3601bi1jiawangVXa9685288_1.html
https://818ps.com/muban/huanqiu360yibiyihezuoVXa9685288_1.html
https://www.5118.com/keyword/110353l13l13l03l13l73l83l33l23l33l13l010315f71c97a53572b6/qs
https://www.5118.com/keyword/110353l13l13l03l13l73l83l33l23l33l13l010315f77405a53572b6/qs
https://www.5118.com/keyword/110353l13l13l03l13l73l83l33l23l33l13l010315f77405f166a9e4/qs
https://www.5118.com/keyword/110353l13l13l03l13l73l83l33l23l33l13l010315f71c9703l63l33l3047fa37/qs
https://www.5118.com/keyword/110353l13l13l03l13l73l83l33l23l33l13l010315f7740503l63l33l3047fa37/qs
https://www.5118.com/keyword/110353l13l13l03l13l73l83l33l23l33l13l010300e44db600e403l63l33l3047fa37/qs
https://www.5118.com/keyword/110353l13l13l03l13l73l83l33l23l33l13l010300e44db600e4a53572b6/qs
https://www.5118.com/keyword/110353l13l13l03l13l73l83l33l23l33l13l010300e44db600e415f77405a53572b6/qs
https://www.clzg.cn/user/795764.html
https://www.clzg.cn/user/796144.html
https://www.clzg.cn/user/796145.html
https://www.sn180.com/member/24341941.html
https://www.sn180.com/member/24341936.html
https://www.sn180.com/member/24341942.html
https://www.sn180.com/member/24341943.html
https://www.sn180.com/member/24341944.html
https://www.sn180.com/member/24341946.html
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70040412/viewspace-3051390/ ,如需转载,请注明出处,否则将追究法律责任。