簡體   English   中英

如何同步文件寫入以實現線程Java之間的最大並發性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM