簡體   English   中英

Java中的進程間文件鎖定

[英]Inter-process file locking in Java

我還沒有發現任何特定的東西,只有類似那的線程,沒有顯示實現。

我需要創建兩個或多個進程(不是線程!)之間共享的文件鎖。 我需要在一個進程中讀取/寫入文件,並確保沒有其他進程同時寫入該文件。 FileChannel.lock()不會執行此操作,因為只要存在鎖,它都會引發異常(OverlappingFileLockException)。

我有兩個想法如何實現進程間互斥,但對我來說似乎都有些不好。

  1. 重復執行鎖定操作直到它起作用-相當令人討厭,但是簡單,它應該可以工作嗎?

     RandomAccessFile rFile = new RandomAccessFile(file, "rw"); FileChannel channel = rFile.getChannel(); FileLock lock; boolean locked = false; while(!locked) { try { lock = channel.lock(); locked = true; } catch(OverlappingFileLockException e) { Thread.sleep(10); } } lock.release(); 
  2. 每當引發異常時,就將當前進程轉換為服務器。 使用ServerSocket偵聽其他進程,並使用Socket傳達已調用lock.release()的信息。 這聽起來像是用大炮殺死了我的蒼蠅。

這兩種解決我的問題的正確方法中的任何一種嗎? 還是已有一個Java機制允許跨進程鎖定文件?

try (RandomAccessFile raf = new RandomAccessFile(file, "rw")) {
    while (raf.getChannel().tryLock() == null) {
        Thread.sleep(10);
    }
    // lock acquired
}

try-with-resurces塊將自動釋放鎖定(間接地-通過關閉RandomAccessFile )。
順便說一句,因為當前JVM已經具有鎖,或者當前JVM的線程已經在等待鎖,所以拋出OverlappingFileLockException

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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