我有很多的應用程序寫入到我在java.I併發文件要進行此操作同時,也希望我的文件保存order.I有 線程1個從網站1線程安全
主題寫作2,從網站2書寫
線程從網站3
3寫作,我想維持秩序。
我怎樣才能做到這一點 感謝
我有很多的應用程序寫入到我在java.I併發文件要進行此操作同時,也希望我的文件保存order.I有 線程1個從網站1線程安全
主題寫作2,從網站2書寫
線程從網站3
3寫作,我想維持秩序。
我怎樣才能做到這一點 感謝
你可以使用普通的同步機制。創建包含對java.io.File對象的引用的文件存儲庫。它會暴露API,如getFile(String path)。要訪問文件每次執行以下操作:
File file = FileRepository.getFile("foo.txt");
synchronized(file) {
// perform any manipulations.
}
同步訪問文件的另一種方式是:
FileChannel.lock()
FileChannel.lock()用於線程互斥還是進程互斥?它是否適用於兩者? – sarnold
使用Queue表示操作的文件,並確保你從拿按照適當的順序排隊(先進先出)。您可以將其視爲producer consumer問題。您有多個線程抓取數據,而單個使用者將該數據寫入磁盤。
我如何維護內容的順序? – constantlearner
隊列記錄了它,它是一個有序的數據結構。使用Java隊列(http://download.oracle.com/javase/6/docs/api/java/util/Queue.html)項目在最後添加並從頭部移除,所以最早的項目首先被移除。因此,一個接一個地將其放入一個文件中,您將獲得與物品到達相同的訂單。 – Daniel
是的,我認爲這是他的問題:當t3在t1之前到達(t3在t1之前完成讀取)時,應該將t3推回到隊列中(如果隊列是正確的答案)。 – PeterMmm
更具體一點:線程2不能寫入文件而線程2沒有寫入? – PeterMmm
3個線程同時寫入我的文件。但我希望數據一致。來自網站1的數據在我的文件和網站2中分組在一起。 – constantlearner
關於N個線程的N個文件是什麼? – PeterMmm