此处显示的for循环在一个线程内运行。在同步块内部,一个线程写入某个文件。有几个不同的文件,所以编写者保存在一个数组中。我想在这里确定的是,没有两个不同的线程同时写入同一个文件。但是,他们可以写入不同的文件。我使用正确的参数与同步块吗?这是在Java中使用同步的正确方法吗?
for(Element e: elements)
{
int i = getWriterIndex(e)
writeri = writers(i)
synchronized(writeri)
{
// Write to corresponding segment
writers(i).write(e)
recordsWritten(i) += 1
}
}
你可以包含包含这个'synchronized'块的方法吗? –
我已经添加了它,不是方法,而是从其调用的那个循环。 – pythonic
我不是专业人士,但是这种看起来像生产者 - 消费者,你的同步代码会阻止整个for循环,也许你想为每个文件使用一个队列,并将数据发送到相应的队列,这样他们可以在自己的线程中写入相应的文件中。再次,我不是专家,完全没有。 –