我有一个产生新线程的ServerClass。
每个线程都有一个数据块供处理。每个线程处理'x'数据块并将一些值返回给ServerClass。 ServerClass平均收集的值并将其传递给线程。并且线程使用平均值恢复工作。 重复相同的过程,直到线程处理整个数据。
我写了这个,每次执行时都会得到不同的输出。 有人能解释我的错误。
ServerClass
public synchronized void put(double[] weight)
{
//System.out.println(Counter);
weights.add(weight);
if(Counter+1 == NoOfThreads)
{
averageWeights();
notifyAll();
Counter =0;
} else
try {
Counter++;
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Threads Class
refer // ServerClass Reference
updatedweights // Averaged Value
int slots = data.size() / batchCount;
for(int i=0; i<slots;i++)
{
double[] p = Algo(data,i*batchCount, (i+1)*batchCount, ServerClass.stepSize, labelIndex, refer.updatedweights);
refer.put(p);
}
答案 0 :(得分:0)
public void put(double[] weight, Threads t)
{
updatingWVector(weight);
if(checkCondition())
{
averageWeights();
Counter =0;
synchronized(lock) {
//System.out.println(t.getId());
lock.notifyAll();
}
} else
{
try {
updateCounter();
synchronized(lock) {
System.out.println(t.getId());
lock.wait();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
lock
的位置
private final Object lock = new Object();
休息代码中的所有方法都在synchronized
块中。