登录
首页 >  文章 >  java教程

子线程中volatile变量无法中断while循环?如何解决?

时间:2024-12-18 21:21:58 257浏览 收藏

知识点掌握了,还需要不断练习才能熟练运用。下面golang学习网给大家带来一个文章开发实战,手把手教大家学习《子线程中volatile变量无法中断while循环?如何解决?》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回头看看说不定又有不一样的感悟!

子线程中volatile变量无法中断while循环?如何解决?

子线程中 while 循环无法中断的原因及其解决方法

本例中,我们创建了一个子线程来修改条件变量 condition 的值为 false,目的是使 run 方法中的 while 循环终止。然而,我们实际观察到 while 循环持续运行,不会打印“退出”信息。

其原因在于 volatile 关键字并不能保证子线程对 condition 的修改在主线程立即可见。当子线程修改 condition 的值时,主线程依然使用该变量的旧值。因此,while 循环仍然以 true 作为条件而持续运行。

要解决这个问题,我们可以将 run 方法本身放到子线程中,确保修改 condition 的操作和 while 循环在同一个线程中执行。修改后的代码如下:

public class VisibilityDemo {
    private static volatile boolean condition = true;

    public static void main(String[] args) {
        new Thread(() -> {
            while (condition) {
                // do something
                System.out.println("...");
            }
            System.out.println("退出");
        }).start();
        new Thread(() -> {
            condition = false;
        }).start();
    }
}

今天关于《子线程中volatile变量无法中断while循环?如何解决?》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>