gpt4 book ai didi

java - Java 5 和 Java 6 之间的 FileLock 变化

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:16:35 27 4
gpt4 key购买 nike

在 Java 1.5 中,java.nio.channels.FileLock 不检查已锁定的文件。 Referenced Here

代码片段指出:

The java.nio.channels.FileLock class checks for files already locked by other FileChannel instances

Java SE 6 throws an OverlappingFileLockException if an application attempts to lock a region that overlaps a region locked through another FileChannel instance. Previous versions did not check for file locks obtained by other FileChannel instances. By default the java.nio.channels.FileChannel.lock method checks if the requested lock overlaps with a region held by this Java virtual machine.

因此,在 Java 6 之前的版本中,如果您有多个程序写入同一个文件(每个程序都试图获得排他锁),则排他文件锁定不起作用。人们如何使用 Java 5 及更早版本解决这个问题?

最佳答案

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

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

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

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

关于java - Java 5 和 Java 6 之间的 FileLock 变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6378191/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com