注意:我已经阅读了关于如何锁定和解锁文件的其他帖子。我没有发现任何我不知道的特别东西。所以我会把我的场景放在这里,以便有人可以提出一些建议。相应地锁定和更新文件
根据我的经验,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