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

题目描述

如题

题目来源及自己的思路

子线程修改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();

}

}

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

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


回答:

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

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


回答:

主线程一直在循环里面,没法执行到new thread(),换下顺序试下.


回答:

run死循环,不会走到new Thread


回答:

你的main方法无法执行到run()这一句之后,代码在run()方法调用后将在当前线程中死循环了。
可以修改为

public static void main(String[] args) {        

new Thread(() -> {

run();

}).start();

condition = false;

}

以上是 为什么下面代码子线程无法中断run方法中的while循环? 的全部内容, 来源链接: utcz.com/p/945384.html

回到顶部