注意:我已阅读有关如何锁定和解锁文件的其他帖子。我没有发现任何我不知道的特别的东西。因此,我将把我的情景放在这里,以便有人可以提出一些建议。
根据我的经验,当来自多个jvm实例的不同对象试图锁定和更新文件时,FileChannel.lock不保证锁定和解锁文件的情况。
我的应用程序中的场景是 - 有三个单独的程序来更新文件。这些程序在不同的jvm实例上运行。假设程序是A,B和C,文件是F.如果A锁定文件F,B和C应该等待F释放,然后其中一个程序可以保持它。如果程序在同一个jvm实例上运行,这可以正常工作。不幸的是,这在多个jvm实例中不起作用。
我有另一个想法是有一个平面文件,我指出是否应该更新F.该平面文件的内容可以是LOCKED或UNLOCKED。默认/初始值将为UNLOCKED。因此,当其中一个程序想要更新F时,它需要在平面文件中看到该标志。如果flag读取LOCKED,它应该等待。在这种方法中,虽然存在一个问题 - 如果多个程序同时打开平面文件并看到“UNLOCKED”或两个正在等待平面文件读取UNLOCKED并且同时看到文件读取的程序会怎么样?解锁“?
任何想法的人?
答案 0 :(得分:3)
如果需要锁定文件系统,则必须创建目录。目录存在意味着“锁定”,缺少目录意味着解锁。
原因是创建和删除目录必须是任何文件系统中的原子操作。因此,只要两个进程尝试创建相同的目录,其中一个就会出错。