本例中,我们创建了一个子线程来修改条件变量 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循环?如何解决?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号