java - 相应地锁定和更新文件

标签 java file locking file-locking unlock

注意:我已阅读有关如何锁定和解锁文件的其他帖子。我没有发现任何我不知道的特别之处。因此,我将把我的场景放在这里,以便更好地理解手头的问题。

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

我的应用程序中的场景是 - 有三个单独的程序更新文件。这些程序正在不同的 jvm 实例上运行。假设程序是 A、B 和 C;文件是 F。如果 A 锁定文件 F,B 和 C 应该等待 F 被释放,然后其他程序之一才能获取它。如果程序在同一个 jvm 实例上运行,则此方法可以正常工作。不幸的是,这在多个 jvm 实例中不起作用。

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

有什么想法吗?

最佳答案

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

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

关于java - 相应地锁定和更新文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1608065/

相关文章:

Javalin Websocket 客户端无提示连接失败

java - JavaFX 桌面应用程序与远程服务器通信的最佳实践

php - 如何将不带换行符的字符串连接到 MySQL 中?

linux - 从两个文本文件(平行语料库)中一致地随机采样 N 行

java - 复制对象的引用或在方法/构造函数中传递它是线程安全的吗?

java - 我如何使用这个 Java GUI API 来绘制东西?

java - 错误: OnCheckedChangeListener cannot be resolved to a type

java - 写入文件不会写入

c# - 字典查找是否需要锁定?

database - 对我来说实现记录锁定的最佳方法是什么?