为什么下面代码子线程无法中断run方法中的while循环?

作者站长头像
站长
· 阅读数 4

题目描述

如题

题目来源及自己的思路

子线程修改condition值为false,run方法while循环终止。

相关代码

粘贴代码文本(请勿用截图)

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

    static void run() {
        while (condition) {
            // do something
            System.out.println("...");
        }
        System.out.println("退出");
    }

    public static void main(String[] args) {
        run();
        new Thread(() -> {
            condition = false;
        }).start();
    }
}

你期待的结果是什么?实际看到的错误信息又是什么?

期待:打印一段".."后打印"退出"。实际:持续打印"..",不会打印"退出"。

回复
1个回答
avatar
test
2024-06-25

run 不结束,不会执行到后面的 new Thread 。而 run 不会结束。

你可以把 run 也放到一个线程中去。

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容