gpt4 book ai didi

java - 为什么这没有正确同步?

转载 作者:行者123 更新时间:2023-11-29 03:34:00 26 4
gpt4 key购买 nike

大家好,我有这段代码:

public class ThreadTester {
public static void main(String args[]) {
Counter c = new Counter();
for (int i = 0; i < 10; i++) {
MyThread a = new MyThread(c);
MyThread b = new MyThread(c);
a.start();
b.start();
}
System.out.println("The value of the balance is " + c.getVal());
}
}

class MyThread extends Thread {
private Counter c;
public MyThread(Counter c){ this.c = c; }
public void run(){ s.increment(); }
}

class Counter {
private int i = 100;
public synchronized void increment(){ i++; }
public synchronized int getVal(){ return i; }
}

现在我认为这应该给出所需的结果 120 - 然而结果似乎在 115 和 120 之间波动。如果我在 b 之后添加一个 Thread.sleep(1)。 start() 我总是得到想要的结果 120。为什么会这样?

这真的让我很困惑,如果能得到任何帮助,我将不胜感激,谢谢

最佳答案

您在启动所有线程之后打印计数器的值,而不是在所有线程完成之后。

在您开始等待的所有线程上使用 Thread.join() 直到它们完成,然后打印值。或者使用 CountDownLatch。 sleep 会意外地给你正确的结果。它允许所有线程完成,但这只是因为它们要做的事情很少,所以 hibernate 1 毫秒就足够了。

关于java - 为什么这没有正确同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16490526/

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