ITPub博客

首页 > 应用开发 > Java > volatile 关键字的作用是什么?

volatile 关键字的作用是什么?

原创 Java 作者:mingtian66 时间:2024-11-27 17:27:45 0 删除 编辑

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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2024-08-07

  • 博文量
    589
  • 访问量
    602951