java - 当应用程序意外退出时处理文件锁定

标签 java file-io locking file-locking

我正在研究锁定 Java 应用程序使用的某些文件的最佳(跨平台)方法。

最坏的情况是程序意外退出(用户强制终止,或不干净退出)。在这种情况下,确保释放文件锁而不影响程序的任何后续访问的最佳方法是什么?

我研究过使用 FileLock,但不干净的终止可能会使文件处于锁定的无法使用状态。

有没有办法用代码解决这个问题?要么首先“清理”捕获此类问题,要么在程序的后续运行中捕获此类问题?

最佳答案

我认为 FileLock 没有您认为的问题。根据文档,它使用操作系统文件锁定功能,我认为这意味着大多数操作系统会在进程退出时清除进程持有的任何锁定(尽管您可能需要进行一些测试来验证这一点)。

否则,您需要一种方法来确定锁是否已过时。

使用 shell 脚本等处理此问题的常用方法是将进程的 ID (PID) 放入锁定文件中。这样,其他看到锁定文件的应用程序就可以通过检查该进程正在运行来验证锁定是否仍然有效。如果进程没有运行,则可以清除锁。

虽然我不知道通过 Java 执行此操作的方法...

关于java - 当应用程序意外退出时处理文件锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7983976/

相关文章:

c - 如何使用 FILE* 参数对 C 函数进行单元测试

在 C 中裁剪 .ppm 文件

mysql - MySQL InnoDB 表的恒定锁等待超时

Java 隐式将整数转换为 ASCII 字符 A-F

java - Java 6 中对 ISO 8601 格式的一般支持

java - 如何打开 .apk 文件

java - 如何使用java检查正在外部更新的文件的内容?

.net - 使用 Datetime.Now 具有不同文件名的 TPL

c# - 如果我在写入变量时锁定,如果读取是原子的,我是否也需要在读取时锁定?

java - Spring Data 不执行查询