使用Java FileLock有多安全?

Gui*_*789 2 java nio file-locking filelock

使用java.nio.channels.FileLock在进程间锁定文件有多安全?据说如果我们有一个独占锁,其他进程就无法访问该文件.但是,关于另一个SO问题的下面答案表明其他进程也必须检查文件锁,以便我们的进程安全.

(a)您是否知道锁定文件不会阻止其他进程接触它,除非它们也使用锁?

所以我测试了我的代码并尝试使用Windows文本编辑器更改了一个我已经锁定的文件,并且我不会受到伤害,但是当我使用Notepad ++进行测试时却没有.

是否有在Java 6中正确锁定文件的解决方案?

Ste*_*n C 8

Java 在许多平台上FileLock使用建议(非强制)锁.这意味着它可能只对其他也使用的应用程序FileLock(或其他语言中的等效应用程序)提供锁定.

Linux或Windows都没有实现强制锁定.例如:

  • 对于Linux等,文件锁定仅供参考.

  • 对于Windows,根据维基百科:

    "对于在Windows中使用文件读/写API的应用程序,在Windows中执行的文件系统强制执行字节范围锁定.对于在Windows中使用文件映射API的应用程序,字节范围锁定不是执行..."

    换句话说,Windows上的锁定可以是强制的,也可以是建议的,具体取决于Windows应用程序用于访问文件的API.


使用Java FileLock有多安全?

如果你实际上在询问是否可以安全地假设它FileLock提供了与所有其他应用程序(Java和非Java)相关的强制文件锁定,而不管它们是如何编写的,答案是否定的.做出这个假设是不安全的.


是否有在Java 6中正确锁定文件的解决方案?

只有所有应用程序(Java和其他)合作; 例如,通过使用FileLock或等效.

如果你不能做出这样的假设,就没有使用便携式Java的解决方案.实际上,在大多数(如果不是全部)常见操作系统平台上,根本没有解决方案,AFAIK ......因为平台本身不支持独立于应用程序的强制文件锁定.