gpt4 book ai didi

java - 为什么这段 java 代码中没有竞争条件?

转载 作者:行者123 更新时间:2023-11-29 03:17:37 25 4
gpt4 key购买 nike

这是我的主题:

public class MyRunnable implements Runnable
{
public static int num = 0;

private void add()
{
num = num + 1;
}

@Override
public void run()
{
for (int i=0;i<10000;i++)
{
add();
System.out.println(num);
}
}
}

这是我的主要内容:

public class MultiThread
{
public static void main(String[] argv)
{
Thread mt1 = new Thread(new MyRunnable(), "A");
Thread mt2 = new Thread(new MyRunnable(), "B");

mt1.start();
mt2.start();
}

}

我希望在那里看到竞争条件,因此输出应该小于 20000。但是,我得到的实际输出是:

19975
19976
19977
19978
19979
19980
19981
19982
19983
19984
19985
19986
19987
19988
19989
19990
19991
19992
19993
19994
19995
19996
19997
19998
19999
20000

Process finished with exit code 0

任何人都可以向我解释为什么在这个 java 程序中添加操作似乎是原子的,即使我没有做任何锁定或同步?

最佳答案

您只是没有尝试足够的次数,或者没有足够仔细地查看您的结果。这段代码

private void add()
{
num = num + 1;
}

绝不安全。您正在为丢失更新做好准备。两个线程都将读取相同的 num 值,并且每个线程都会更新它,因此一个增量将丢失。

关于java - 为什么这段 java 代码中没有竞争条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25597457/

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