【发布时间】:2012-12-19 03:39:43
【问题描述】:
我有一个生成新线程的 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);
}
【问题讨论】:
-
您的代码面临的问题是什么?解释一下
-
阅读循环障碍,在这里它们对你很有用。
-
@Jayamohan :即使通过相同的输入,我也会得到不同的
updatedweights变量。我想问一下,我可以在synchronized方法中调用wait()吗?它会阻止其他线程执行该方法吗(在我的情况下为put())。
标签: java multithreading