java - 在后台线程中调用 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
变量的更新?我很感激对此的解释:)
解决方案
推荐阅读
- c# - 从 DistListItem 对象获取 Outlook ContactItems
- r - R包philentropy与代理中的Jaccard距离
- javascript - 如何在 JavaScript 中使用 RPC 查询和 Odoo 11 / 12 中的搜索方法?
- ios - 轮换前如何知道自己状态的新高度
- python - 我正在使用地理编码器通过给出一个地点的名称来获取纬度、经度和地址。如何迭代数据框列
- r - 如何在ggplot中绘制点到点不包括零
- leaflet - 传单禁用垂直拖动越界
- .htaccess - htaccess 中的重定向规则获取错误消息
- apache-camel - 骆驼路线中的方法引用
- powershell - 使用“发送为”发送邮件或更改发件人