gpt4 book ai didi

java - 这段代码中是否存在竞争条件?

转载 作者:行者123 更新时间:2023-12-01 07:47:46 24 4
gpt4 key购买 nike

我需要增加 5 个线程中的计数器,直到达到 500。像这样的 5 个线程正在工作。但我需要知道它是否有竞争条件。

此代码的另一个问题是它以错误的顺序提供打印结果。

class HiloContador extends Thread {

static int count = 0;

@Override
public void run() {
for (int i = 0; i < 100; i++) {
synchronized (new Integer(count)) {
++count;
System.out.println(count);
}
}
}
}

输出

4 6 8 9 10 11 12 5 14 15 3 17 18

一些想法?

最佳答案

是的,存在竞争条件,因为您实际上同步了不同对象上的代码。同步块(synchronized block)代表临界区。要进入关键部分,您必须获得全局锁。您可以使用对象来锁定或使用整数。这就是我的实现方式:

class HiloContador extends Thread {

static int count = 0;
static Object lock = new Object();

@Override
public void run() {
for (int i = 0; i < 100; i++) {
synchronized (lock) {
++count;
System.out.println(count);
}
}
}
}

现在 println 将按预期顺序排列。

关于java - 这段代码中是否存在竞争条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47413738/

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