为什么下面代码子线程无法中断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