我正在研究锁定 Java 应用程序使用的某些文件的最佳(跨平台)方法。
最坏的情况是程序意外退出(用户强制终止,或不干净退出)。在这种情况下,确保释放文件锁而不影响程序的任何后续访问的最佳方法是什么?
我研究过使用 FileLock,但不干净的终止可能会使文件处于锁定的无法使用状态。
有没有办法用代码解决这个问题?要么首先“清理”捕获此类问题,要么在程序的后续运行中捕获此类问题?
最佳答案
我认为 FileLock 没有您认为的问题。根据文档,它使用操作系统文件锁定功能,我认为这意味着大多数操作系统会在进程退出时清除进程持有的任何锁定(尽管您可能需要进行一些测试来验证这一点)。
否则,您需要一种方法来确定锁是否已过时。
使用 shell 脚本等处理此问题的常用方法是将进程的 ID (PID) 放入锁定文件中。这样,其他看到锁定文件的应用程序就可以通过检查该进程正在运行来验证锁定是否仍然有效。如果进程没有运行,则可以清除锁。
虽然我不知道通过 Java 执行此操作的方法...
关于java - 当应用程序意外退出时处理文件锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7983976/