java - 线程内一致性
问题描述
代码很简单。
// not annotated with volatile
public static int I = 0;
public static int test(){
I = 1;
return I;
}
有一个调用该方法的线程test
。
该方法是否有可能test
返回值“0”?
换句话说,共享变量的读取可能看不到同一线程的修改。
更新
这个问题很简单,但我让它晦涩难懂,我真的很抱歉。
a thread
手段a single thread
。_
问题与它重复。
解决方案
不,如果不涉及其他线程,但将调用该方法,它将为1 。
chrylis -cautiouslyoptimistic的答案对于另一种情况也值得一读。
两个原因:
I
只是由它的所有者更改,如果另一个线程只是调用 test(),则没有选项可以将 0 作为I
' 值。- 第二个线程不会读取
Class.I
的值,而是方法的结果。test()
分配I=1
发生在返回之前,因此保证提供最新的更新值(仅由所有者更新一次)。
推荐阅读
- r - 根据各种数字删除多行
- android - 如果自昨晚以来没有任何更改,但有由 Gerrit 触发的 CI 构建,如何防止 Jenkins 触发夜间构建?
- angular - angular 6 生产 main.ts 文件大小
- python - 在元组中查找元素
- database - 如何编写和提取数学函数到 phpMyAdmin
- javafx - 使用 JavaFX 的应用程序中心未显示警报框
- python-3.x - 运行长度编码python;字符串索引超出范围错误
- excel - Excel FORECAST 函数来自多行中的历史数据
- typescript - 玩笑(与 tsjest)+ 打字稿 outDir 没有按预期工作
- php - 如何获取从 MySQL 查询中检索到的全部文档/对象?