FileLock在java中是安全的,跨越同一进程中的多个线程,还是不同进程之间或两者之间?

时间:2012-05-10 09:38:45

标签: java multithreading file-locking

java中的FileLock在同一进程内或不同进程之间或两者之间的多个线程中是否安全?

javadoc说:

  

代表整个Java虚拟机保存文件锁。它们不适合控制同一虚拟机中多个线程对文件的访问。

     

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

我真的不明白:这是否意味着FileLock在同一个进程中的多个线程之间,多个不同进程之间或两者之间是安全的?

2 个答案:

答案 0 :(得分:2)

它表示当您将它们视为普通Java对象时,这些对象是线程安全的,但它们不会阻止其他线程打开同一个文件。也就是说,当您查看他们提供的服务时,它们并不安全。

答案 1 :(得分:2)

再向下:

  

此文件锁定API旨在直接映射到本机   底层操作系统的锁定设施。因此锁   保存在文件中的应该对所有可以访问的程序可见   该文件,无论这些程序的语言是什么   写入。

这有力地表明其目的是在不同的过程之间使用。

这一行:

  

它们不适合控制多个文件的访问   同一个虚拟机中的线程。

如果您有一个包含多个线程的进程,

建议您不要使用它。在这种情况下,您可以使用synchronized部分或ReadWriteLock