因此锁定和更新文件

时间:2009-10-22 15:32:23

标签: java file locking file-locking unlock

注意:我已阅读有关如何锁定和解锁文件的其他帖子。我没有发现任何我不知道的特别的东西。因此,我将把我的情景放在这里,以便有人可以提出一些建议。

根据我的经验,当来自多个jvm实例的不同对象试图锁定和更新文件时,FileChannel.lock不保证锁定和解锁文件的情况。

我的应用程序中的场景是 - 有三个单独的程序来更新文件。这些程序在不同的jvm实例上运行。假设程序是A,B和C,文件是F.如果A锁定文件F,B和C应该等待F释放,然后其中一个程序可以保持它。如果程序在同一个jvm实例上运行,这可以正常工作。不幸的是,这在多个jvm实例中不起作用。

我有另一个想法是有一个平面文件,我指出是否应该更新F.该平面文件的内容可以是LOCKED或UNLOCKED。默认/初始值将为UNLOCKED。因此,当其中一个程序想要更新F时,它需要在平面文件中看到该标志。如果flag读取LOCKED,它应该等待。在这种方法中,虽然存在一个问题 - 如果多个程序同时打开平面文件并看到“UNLOCKED”或两个正在等待平面文件读取UNLOCKED并且同时看到文件读取的程序会怎么样?解锁“?

任何想法的人?

1 个答案:

答案 0 :(得分:3)

如果需要锁定文件系统,则必须创建目录。目录存在意味着“锁定”,缺少目录意味着解锁。

原因是创建和删除目录必须是任何文件系统中的原子操作。因此,只要两个进程尝试创建相同的目录,其中一个就会出错。