我一直在努力实现一个自定义的循环障碍,它添加传递给 await 方法的值,并在调用 notify 后将总和返回给所有线程。
编码:
public class Barrier {
private final int parties;
private int partiesArrived = 0;
private volatile int sum = 0;
private volatile int oldSum = 0;
public Barrier(int parties) {
if (parties < 1) throw new IllegalArgumentException("Number of parties has to be 1 or higher.");
this.parties = parties;
}
public int getParties() { return parties; }
public synchronized int waitBarrier(int value) throws InterruptedException {
partiesArrived += 1;
sum += value;
if (partiesArrived != parties) {
wait();
}
else {
oldSum = sum;
sum = 0;
partiesArrived = 0;
notifyAll();
}
return oldSum;
}
public int getNumberWaiting() { return partiesArrived; }
}
这可行,但我听说有一种方法可以将值sum
和oldSum
(或至少oldSum
)更改为方法的局部变量waitBarrier
。然而,在我绞尽脑汁之后,我看不到任何办法。
有可能吗?如果有,怎么做?