因此,我们的任务是找到导致结果< 10。 现在我很难找到所说的交错。
我的第一个想法是:
- 从第一个线程到最后一个迭代的for循环
然后线程开始交错,因此sum重置为1
- 这将导致sum = 10
第二个想法是:
-let他们从头开始交错 - 两个线程的每个时间都将被升级,然后是总和 - 这也会导致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);
}
}
这是我在这里发表的第一篇文章,所以我希望它符合所有标准,如果不是,我可以为任何评论家开放。
答案 0 :(得分:1)
理论上,如果我没有记错,你可以得到sum = 2
- 让我们假设以下情况:
countedSoFar = 0
开头。sum
更改为9 sum
更改回countedSoFar (=0) + 1 = 1
。countedSoFar = sum = 1
。sum
并不感兴趣)sum = 1+1