2015-04-02 121 views
-1

我有一個文件模擬10X3陣列。第一列是一個序列號,女巫是獨一無二的,所以我可以分辨每一行。我問是否有可能同步2個線程寫入同一個文件,根據它們的行來鎖定它們(如果線程2在同一行寫入線程1想寫入的話,線程1不能訪問文件,它們可以同時寫入其他行)。我有一個包含10個ReentrantLock()項目的Lock數組,每個Lock項目都會鎖定相應的id行(他們在爲文件搜索ID之前獲取鎖定)。簡單的方法是將文件加載到數組中。但我想知道如果我能在文件中實現這一點。我不深入瞭解Java中的文件是如何工作的,但我主要關心的是,當他們在文件中同時寫入時,最後結束的線程將給出文件的最終值,因此迄今爲止所做的任何更改由其他線程將被刪除,因爲該文件需要保存。同時寫入JAVA中的多個線程的單個文件,按行同步

+0

爲什麼你需要同時寫入文件?按順序執行這些更改會不會更簡單? – 2015-04-02 15:28:31

+0

我不相信Java的'OutputStream'支持像這樣通過文件中途寫入。可能還有另一種方法可以做到這一點,但在我10年的Java行業經驗中,這從來沒有必要或實用。另一件需要考慮的事情是磁盤總是比CPU慢,所以多線程寫入不會讓你獲得任何加速。我認爲,只有在將多個文件寫入多個獨立磁盤的情況下才能獲得加速。 – CodeBlind 2015-04-02 15:29:58

+0

[This](http://stackoverflow.com/q/7565034/2675154)對於C++來說是一個類似的問題,但也許答案給你一些一般的見解。 – honk 2015-04-02 15:32:58

回答

1

有一個文件,這是不可能的,我認爲你提到的原因。

如果你真的想用純文本文件做到這一點,你可以爲每一行創建一個文件。另一種選擇是使用Document。一旦完成所有工作,將文檔解析爲純文本文件應該很容易。

最簡單的解決方案是在我看來使用數據庫,特別是如果有機會在稍後增加數組的大小。

+0

我想我會去與陣列。當然,一個數據庫將是最好的想法,但我想要一個項目。我正在考慮這兩種方式(因爲我們有文件而不是數據庫)。也許當我完成它時,我會測試其他方法併發布一些結果:) – 2015-04-02 16:01:16