2011-07-13 182 views
1

我有很多的應用程序寫入到我在java.I併發文件要進行此操作同時,也希望我的文件保存order.I有 線程1個從網站1線程安全

主題寫作2,從網站2書寫

線程從網站3

3寫作,我想維持秩序。

我怎樣才能做到這一點 感謝

+0

更具體一點:線程2不能寫入文件而線程2沒有寫入? – PeterMmm

+0

3個線程同時寫入我的文件。但我希望數據一致。來自網站1的數據在我的文件和網站2中分組在一起。 – constantlearner

+0

關於N個線程的N個文件是什麼? – PeterMmm

回答

3

你可以使用普通的同步機制。創建包含對java.io.File對象的引用的文件存儲庫。它會暴露API,如getFile(String path)。要訪問文件每次執行以下操作:

File file = FileRepository.getFile("foo.txt"); 
synchronized(file) { 
    // perform any manipulations. 
} 

同步訪問文件的另一種方式是:

FileChannel.lock() 
+1

FileChannel.lock()用於線程互斥還是進程互斥?它是否適用於兩者? – sarnold

4

使用Queue表示操作的文件,並確保你從拿按照適當的順序排隊(先進先出)。您可以將其視爲producer consumer問題。您有多個線程抓取數據,而單個使用者將該數據寫入磁盤。

+0

我如何維護內容的順序? – constantlearner

+0

隊列記錄了它,它是一個有序的數據結構。使用Java隊列(http://download.oracle.com/javase/6/docs/api/java/util/Queue.html)項目在最後添加並從頭部移除,所以最早的項目首先被移除。因此,一個接一個地將其放入一個文件中,您將獲得與物品到達相同的訂單。 – Daniel

+0

是的,我認爲這是他的問題:當t3在t1之前到達(t3在t1之前完成讀取)時,應該將t3推回到隊列中(如果隊列是正確的答案)。 – PeterMmm