0

我读了这篇文章。谁能告诉我这是否java.nio.FileLock.lock()适用于java.util.Properties课堂。

问题:

如果我将锁定的属性文件放在我读取的内容上,这是否会锁定文件以进行其他并发锁定?代码将锁定类似:



try {

     Properties prop = new Properties();
     FileInputStream fis = new FileInputStream(new File("/my/path"));
     FileLock lock = fis.getChannel().lock();
     prop.load(fis);

} catch (FileNotFoundException e) {
   //catch it...
} catch (IOException e) {
   //catch it...
}

//....
lock.release();
//...

谢谢!


来自JavaDocs

1.单个 Java 虚拟机对特定文件持有的锁不重叠。

2.a. 文件锁代表整个 Java 虚拟机持有。它们不适用于控制同一虚拟机内的多个线程对文件的访问。

湾。文件锁对象可以安全地被多个并发线程使用。

与 1 相关:我试图从同一个 JVM 但从不同的线程锁定同一个文件,当一个线程试图锁定已经锁定的文件时它会抛出错误。我认为这种行为不是JavaDoc规范所期望的。

与 2 a 和 b 相关:在我看来,它们是矛盾的。我对吗?如果没有,谁能解释我有什么意义?

4

1 回答 1

2

文件锁通常是建议性的:也就是说,它们只影响也使用文件锁的其他进程,例如 JVM。java.util.Properties根本不这样做,但是它也不处理文件,只处理输入流。因此,如果您提供来自您正在设置/检查文件锁定的文件的输入流,它将起作用。但仅限JVM 之间,而不是在单个 JVM 内:请参阅 Javadoc。

于 2012-02-27T09:00:26.933 回答