我有运行后台线程的简单程序:
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
变量的更新?我希望对此做出解释:)