首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java 5和java 6之间的FileLock更改

java 5和java 6之间的FileLock更改
EN

Stack Overflow用户
提问于 2011-06-16 20:28:30
回答 1查看 1.1K关注 0票数 3

在Java1.5中,java.nio.channels.FileLock没有检查已经锁定的文件。在此参考

片段声明:

java.nio.channels.FileLock类检查已被其他FileChannel实例锁定的文件 如果应用程序试图锁定与通过另一个FileChannel实例锁定的区域重叠的区域,则Java 6将抛出一个FileChannel。以前的版本没有检查其他FileChannel实例获得的文件锁。默认情况下,java.nio.channels.FileChannel.lock方法检查请求的锁是否与此Java虚拟机持有的区域重叠。

因此,在预Java 6中,如果有多个程序写入同一个文件(每个程序都试图获得独占锁),独占文件锁定就无法工作。人们是如何用Java 5和之前的版本来解决这个问题的?

EN

回答 1

Stack Overflow用户

发布于 2011-06-16 20:47:15

我不认为Java5 5的行为是一个严重的问题。

考虑将文件锁与进程关联的OS。如果一个进程已经拥有一个文件锁,当它再次请求该锁时,OS可以授予它而不会出错。从某种意义上说,这是一种“重入式”锁。它防止两个进程同时锁定同一个文件,并且由进程来确保当它拥有锁时,它不会有两个线程对文件进行一些重叠的更改。

在JVM中通常有很多独立的包,必须有两个包试图锁定同一个文件的用例。如果他们都被授予了锁,我们就有麻烦了。很难要求这两个独立的包以某种方式合作,因此Java6将所有权从整个过程缩减为一个渠道。(希望这两个包不会共享同一个频道)

然而,这样的用例可能并不常见。通常,文件是某种特殊类型的文件,只能由某个包处理。假设一个数据库包,它的文件不太可能被同一个JVM中的其他包所接触,但在其他JVM中可能会被同一个包所接触。因此,在这种情况下,Java5 5的行为是可以的,而且这种情况可能是大多数情况。

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

https://stackoverflow.com/questions/6378191

复制
相关文章

相似问题

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