此處顯示的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循環,也許你想爲每個文件使用一個隊列,並將數據發送到相應的隊列,這樣他們可以在自己的線程中寫入相應的文件中。再次,我不是專家,完全沒有。 –