首页 > 解决方案 > 在后台线程中调用 System.out.println 更新从主线程更改的变量?

问题描述

我有一个运行后台线程的简单程序:

private static boolean isRunning = true;
public static void main(String[] args) throws InterruptedException {
    Thread bgThread = new Thread(() -> {
        int i = 0;
        while (isRunning) {
            i++;
        }
    });
    bgThread.start();
    TimeUnit.SECONDS.sleep(1);
    isRunning = false;
}

由于isRunning变量没有同步,这个程序永远不会在我的电脑上结束。后台线程永远存在。这是可以理解的,但是当我System.out.println(i)在任务中添加指令时Runnable,它会在 1 秒后停止!

Thread bgThread = new Thread(() -> {
    int i = 0;
    while (isRunning) {
        i++;
        System.out.println(i);
    }
});

为什么这条指令会导致后台线程注意到isRunning变量的更新?我很感激对此的解释:)

标签: javamultithreading

解决方案


推荐阅读