- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在 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/
我试图通过 5 个不同的线程编辑一个 json 文件,然后将其复制 5 次,也到相同的目标路径。如您所见,存在并发问题。 我尝试了这个复制方法: public static void copyFile
我需要锁定一个从三个不同的 android 应用程序读取和写入的文本文件...所以不同的进程。 我尝试在写入时使用 channel lock()(独占模式),在读取文件时使用 lock(0L, Lon
我有一个进程会被 cron 频繁调用,以读取其中包含某些与移动相关的命令的文件。我的进程需要读取和写入此数据文件 - 并保持锁定以防止其他进程在此期间接触它。用户可以执行一个完全独立的过程来(潜在的)
这是我见过的向文件追加行的最清晰的方法。 (如果文件尚不存在则创建该文件) String message = "bla"; Files.write( Paths.get(".queue"),
我使用以下代码在一个 Java 应用程序中获取文件的锁: ... File file = new File("/some/file/at/some/path.txt"); FileChannel ch
我正在设计一个应用程序,其主线程通过读取和写入 .txt 文件与它进行交互。 此应用程序还有一个后台 IntentService,它将读取和写入此文件。 我需要能够读入一个文件,并用新数据将其写回,同
我发现 Java 文件锁定机制是一个真正的错误,因为它不能执行锁定的第一条规则 - 阻塞对锁定的调用!除非我错了 - 如果应用程序已经保持对文件的锁定,则调用 lock() 将抛出异常,我知道我的应用
使用 java.nio.channels.FileLock 的安全性如何用于在进程之间锁定文件?据说如果我们有排它锁,其他进程就无法访问该文件。然而,下面另一个答案SO question声明其他进程也
我只是想知道如果 JVM 严重崩溃或者收到 SIGKILL 信号,FileLock 的锁会发生什么情况。 FileLock doc 中没有任何内容关于它有详细说明,所以我假设它已发布。只是想确定一下.
我试图在我的设备的“外部”存储(在我的情况下不可移动)上锁定正在写入的文件。获得锁定后,我可以进入文件浏览器(在另一个应用程序中)并读取或删除正在写入的文件。有没有办法避免这种情况? FileOutp
Java 中的 FileLock 在同一进程内或不同进程之间或两者之间的多个线程之间是否安全? javadoc说: File locks are held on behalf of the entir
我正在尝试使用 Java FileLock 写入文件, 以禁止所有其他进程和线程读取或写入它,直到我完成它。鉴于 this question以及它的答案,在我看来,这是我想要的完美工具——一个用于文件
我想从 c 程序创建一个文件,我想在我的 c 二进制文件中使用一段时间。但我想以这样的方式创建文件,直到我的 c 程序完成处理文件创建并解锁它,没有人(可能使用 vim 或任何其他编辑器)能够打开和读
我正在创建一个用于打开和编辑 xml 文件的简单应用程序。这些文件位于应用程序的多个实例访问的本地文件夹中。我想要做的是锁定应用程序实例打开的每个文件,以便其他实例无法访问它。 为此,我使用了以下代码
我正在学习 FileOperations,并正在编写一个程序来在 Linux 机器上实现 FileLocking。 这个程序的目的是,如果多人调用该程序,该实例应该获得一个文件锁(类似于 linux
我有一个 tomcat/blazeDS 应用程序,多个用户写入同一个 xml 文件。当他们写的时候,我想对该文件进行文件锁定。我的第一次尝试是获取文件的文件 channel 并为文件建立一个 lock
我注意到 java.io和 java.nio随机访问文件的实现在 FileLocks 方面略有不同。得到处理。 似乎(在 Windows 上)java.io 为您提供强制文件锁定,而 java.nio
我有一个使用 POSIX 建议锁来锁定文件的 C++ 程序。也就是说,它使用 POSIX fcntl system call用于锁定操作。我希望 Java 程序与该 C++ 程序互操作,因此我希望我的
我正在用 Java 创建一个应用程序,我只想为其运行一个实例。为此,我创建了一个文件并在应用程序运行时获得了锁。 我有以下代码,可以在 Windows 上运行,但在 Linux 上失败:一旦我获得了一
我正在使用 the filelock module for Python . 在 Windows 上,当释放锁时,支持它的文件将被删除。 在 UNIX 上,即使在锁被释放后,锁文件仍然存在于文件系统中
我是一名优秀的程序员,十分优秀!