gpt4 book ai didi

Java-并发和交错

转载 作者:行者123 更新时间:2023-12-01 11:31:38 25 4
gpt4 key购买 nike

所以我们的任务是找到一个交错,其结果是 < 10。现在我很难找到所说的交错。

我的第一个想法是这样的:

-从第一个线程执行 for 循环直到最后一次迭代
-然后线程开始交错,因此总和重置为 1-这将导致 sum = 10

第二个想法是:

-让它们从一开始就交错-每次两个线程的计数都将被升级,然后总和-这也将导致 sum = 10

现在我不知道如何才能使总和低于 10。我添加了代码,任何帮助将不胜感激。

public class ConcurrentCounter {

private static int sum = 0;
private static final int max = 10;

public static void main(String[] args) throws InterruptedException {
Runnable count = new Runnable() {
@Override
public void run() {
int countedSoFar;

for (int i = 0; i < max; i++) {
countedSoFar = sum;

//helps to see more interleavings
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}

sum = countedSoFar + 1;
}
}
};


Thread countFirst = new Thread(count);
Thread countSecond = new Thread(count);

countFirst.start();
countSecond.start();

//wait until both threads are finished
countFirst.join();
countSecond.join();

System.out.println(sum);
}
}

这是我在这里发表的第一篇文章,所以我希望它符合所有标准,如果不符合,我愿意接受任何类型的批评。

最佳答案

理论上,如果我没记错的话,你可以得到 sum = 2 - 让我们假设以下场景:

  1. 两个线程均以 countedSoFar = 0 开头。
  2. 第一个线程将执行 9 轮,将 sum 更改为 9
  3. 第二个线程完成第一轮,将 sum 更改回 countedSoFar (=0) + 1 = 1
  4. 第一个线程开始最后一轮设置countedSoFar = sum = 1
  5. 第二个线程完成了所有回合(值 sum 并不有趣)
  6. 第一轮结束,设置 sum = 1+1

关于Java-并发和交错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30335889/

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