注意:我已經閱讀了關於如何鎖定和解鎖文件的其他帖子。我沒有發現任何我不知道的特別東西。所以我會把我的場景放在這裏,以便有人可以提出一些建議。相應地鎖定和更新文件
根據我的經驗,FileChannel.lock並不能保證當多個jvm實例的不同對象試圖鎖定和更新文件時,鎖定和解鎖文件的情況。
我的應用程序中的場景是 - 有三個更新文件的單獨程序。這些程序在不同的jvm實例上運行。假設程序是A,B和C,文件是F.如果A鎖定了文件F,那麼B和C應該等待F被釋放,然後其他程序才能保留它。如果程序在同一個jvm實例上運行,這可以正常工作。不幸的是,這在多個jvm實例中不起作用。
我有另一個想法是有一個平面文件,我會表明如果F應該更新。該平面文件的內容可以是LOCKED或UNLOCKED。默認/初始值將被解鎖。所以,當其中一個程序想要更新F時,它需要在平面文件中看到該標誌。如果標誌讀取LOCKED,它應該等待。在這種方法中,雖然有一個問題 - 如果多個程序同時打開平面文件,看到「UNLOCKED」或兩個正在等待平面文件讀取UNLOCKED的程序,並且同時看到文件讀取「 UNLOCKED「?
任何想法的傢伙?
曾經看過Lucene的org.apache.lucene.store.Lock(例如SimpleFSLock和NativeFSLock)的實現嗎?這些課程是爲了完全相同的目的而製作的,所以也許你會從中得到一些想法。 – sfussenegger 2009-10-22 15:41:31
聽起來很酷..我要去看看。太感謝了。 – DragonBorn 2009-10-22 15:43:06