[英]How to synchronize file writing to achieve maximum concurrency between threads Java
我有10個文本文件,用於存儲記錄。 在我的應用程序中,我有幾個操作,例如寫入文件和編輯文件(如果找到指定的行我創建一個臨時文件並在那里傳輸所有信息,然后刪除舊文件並重命名臨時文件)。
我的所有客戶都可以訪問10個文本文件,因此我希望同步他們的活動以保持數據的一致性。
如果客戶端正在編輯或寫入,我想鎖定或同步文件,比如說f1.txt,所以沒有其他人可以寫入/編輯它,並通過讓另一個客戶端同時編輯f2.txt來增加並發性。
public void writeToFile(String pathname){
File f1 = new File(pathname)
synchronize (f1) {.. // do something}
}
我的問題是每次使用特定路徑創建一個新文件。
我很感激你的任何指導和幫助。
謝謝
如果我理解正確,您希望在特定文件路徑上進行同步(並且文件系統不會以您喜歡的方式強制執行此操作)。 你是對的, File
對象不起作用。 您需要同步的是文件的名稱 。
public void writeToFile(String pathname){
File f1 = new File(pathname)
synchronize (f1.getCanonicalPath().intern()) {.. // do something}
}
getCanonicalPath
方法將為引用相同路徑的任何兩個File
對象返回相同的String
值。 例如,如果../logs/mylog.txt
和/var/spool/logs/mylog.txt
是同一個文件,它們將具有相同的規范路徑。
intern
方法為具有相同value
任何兩個String
對象返回相同的引用 。 因此,您最終鎖定的是文件的規范路徑的單例實例。
我認為這符合您的需求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.