gpt4 book ai didi

java - 当 i++ 被同时执行的线程破坏时,如何模拟一种情况?

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

如果 int 递增/递减操作在 Java 6 中不是原子的,也就是说,据说它们是分几步执行的(读取值、递增、写入等),我希望看到一段代码将演示多个线程如何以完全破坏单个 int 变量的方式影响它。

例如,基本步骤包括但不包括所有这些:i++ ~= 将 i 放入寄存器;递增 i(包括 asm 操作);将 i 写回内存;

如果两个或多个线程在此过程中交错,这可能意味着在两次后续调用 i++ 之后的值只会增加一次。

你能用 java 演示一段在多线程环境中模拟这种情况的代码吗?

最佳答案

public class Test {
private static int counter;

public static void main(String[] args) throws InterruptedException {
Runnable r = new Runnable() {
public void run() {
for (int i = 0; i < 100000; i++) {
counter++;
}
}
};
Thread t1 = new Thread(r);
Thread t2 = new Thread(r);
t1.start();
t2.start();
t1.join();
t2.join();
if (counter != 200000) {
System.out.println("Houston, we have a synchronization problem: counter should be 200000, but it is " + counter);
}
}
}

在我的机器上运行这个程序可以得到

Houston, we have a synchronization problem: counter should be 200000, but it is 198459

关于java - 当 i++ 被同时执行的线程破坏时,如何模拟一种情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7037268/

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