在后台线程中调用System.out.println更新变量是否已从主线程更改?

时间:2019-04-05 07:45:48

标签: java multithreading

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

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变量的更新?我希望对此做出解释:)

0 个答案:

没有答案