gpt4 book ai didi

java - 并发 int 读写问题

转载 作者:行者123 更新时间:2023-11-30 06:09:29 25 4
gpt4 key购买 nike

有人可以帮我理解为什么下面的程序退出吗?一个线程正在交替更新 i 1 和 2。另一个线程正在读取 i,如果 i 值既不是 1 也不是 2,则该线程将退出。实际上下面的程序不应该退出,但它会退出打印 1 或 2。

static volatile int i = 1;

public static void main(String[] args) {

new Thread(new Runnable() {

@Override
public void run() {
while (true) {
i = (i == 1 ? 2 : 1);
}
}
}).start();

new Thread(new Runnable() {

@Override
public void run() {
while (true) {
if (i != 1 && i != 2) {
System.out.println("i=" + i);
System.exit(0);
}
}
}
}).start();
}

最佳答案

因为在if (i != 1 && i != 2)语句中有两条检查指令,它们是按顺序求值的,所以当i != 1 被调用,i 的值为 2,因此它的计算结果为 false 并且当 i != 2 code> 被调用 i 已被切换线程切换回值 1,因此它也评估为 false 作为整个 code>if (i != 1 && i != 2) 计算结果为 false,因为 java 中 if 的计算不是原子的。

关于java - 并发 int 读写问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37791677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com