首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Java FileLock有多安全?

使用Java FileLock有多安全?
EN

Stack Overflow用户
提问于 2016-01-14 07:25:45
回答 3查看 4.5K关注 0票数 2

使用java.nio.channels.FileLock锁定进程间的文件有多安全?据说,如果我们有独占锁,其他进程无法访问该文件。但是,下面对另一个所以问题的回答指出,为了使我们的进程安全,其他进程也必须检查文件块。

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

因此,我测试了我的代码,并试图改变我已经拥有锁的文件,使用和我是安全的,但当我用Notepad++测试的时候,我是安全的。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-01-14 08:01:11

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

Linux和Windows都没有全面实现强制锁定。例如:

  • 对于Linux和类似的操作系统,文件锁定只是建议性的。
  • 根据维基百科的说法: 对于在Windows中使用文件读写API的应用程序,字节范围锁由在Windows内执行的文件系统强制执行。对于在Windows中使用文件映射API的应用程序,字节范围锁不强制执行.

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

使用Java FileLock有多安全?

如果您实际上是在问是否可以安全地假定FileLock为所有其他应用程序(Java和非Java)提供强制文件锁定,而不管它们是如何编写的,则答案是No。做出这样的假设是不安全的。

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

只有当所有的应用程序(Java和其他)进行合作时,例如使用FileLock或等效的应用程序。

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

票数 9
EN

Stack Overflow用户

发布于 2016-01-14 07:59:13

来自平台依赖项下的java.nio.channels.FileLock的Javadoc:

一些系统的本机文件锁定工具仅仅是建议性的,这意味着程序必须合作遵守已知的锁定协议,以确保数据的完整性。在其他系统上,本机文件锁是强制性的,这意味着如果一个程序锁定文件的某个区域,那么其他程序实际上无法以违反该锁的方式访问该区域。在其他系统上,无论本机文件锁是建议锁还是强制锁,都可以根据每个文件进行配置。为了确保跨平台的一致和正确的行为,强烈建议将此API提供的锁当作顾问锁一样使用。

正如您从测试中发现的那样,运行在您的Windows版本上的其他非Java代码不必遵守您的独占锁。

您唯一的解决方案是尽可能快地将文件读入内存,花时间处理信息,然后尽可能快地将文件写入磁盘。

票数 1
EN

Stack Overflow用户

发布于 2016-01-14 08:00:40

据说,如果我们有独占锁,其他进程无法访问该文件。

上面写着在哪里?不是在Javadoc。

但是,下面对另一个问题的回答是,为了使我们的过程安全,其他进程也必须检查文件。

这是正确的。

因此,我测试了我的代码,并试图改变我已经拥有锁的文件,使用和我是安全的,但是当我用Notepad++测试的时候就没有了。

通过在文件锁影响普通打开的一个平台上进行测试,您已经做了一些无效的事情,但从中得出的唯一结论是,这是不安全的。Notepad++将文件保持为打开状态,因此会遇到锁,但不会打开,因此也不会看到锁,直到您尝试保存。

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

除非您锁定的应用程序也使用文件锁。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34783799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档