2011-06-21 86 views
0

我有一個文本文件需要被兩個線程讀取,但我需要依次進行讀取。示例:線程1獲取鎖並讀取第一行,鎖定空閒。線程2獲取鎖定並讀取第2行,繼續。 我在想共享相同的緩衝區讀取器或類似的東西,但我不太確定。 在此先感謝!Java - 多線程和文件問題

EDITED

將是2類每一個具有螺紋。這兩個類將讀取相同的文件。

+0

在您的問題中使用反引號(')會導致文本被格式化爲代碼。 – razlebe

+0

這可能是無關的。但你爲什麼想這樣做? – RMT

回答

3

你可以像你說的那樣鎖定BufferReader。

我會提醒你,性能可能比僅使用一個線程更糟糕。不過,您可以將其作爲練習。

+0

感謝您的回答!我可以使用FileChannel鎖來鎖定緩衝讀取器,還是手動創建? – Samth

+0

您可以使用線程之間共享的任何對象。 BufferedReader或FileChannel必須共享才能工作。你的確看過我的警告,那可能是毫無意義的。 ;) –

+0

但我怎樣才能正確共享線程之間的對象? – Samth

1

在一個線程中逐行讀取文件並通過隊列(例如ConcurrentLinkedQueue)將結果輸入行傳遞給線程池可能會更高效,如果要保證至少開始處理的文件行。更容易實現,並且無論您用於讀取文件的任何類都沒有爭用。

除非有一些鑄鐵理由,你爲什麼你需要讀取發生在每個線程本地,我會避免共享這樣的文件。

+0

+1以獲得更清潔的解決方案。我就是這樣做的 - 讀入一個進程,排隊到2。 –