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

java中的FileLock在同一进程内的多个线程之间、不同进程之间或两者之间安全吗?,java,multithreading,file-locking,Java,Multithreading,File Locking,java中的FileLock在同一进程内的多个线程之间、不同进程之间或两者之间安全吗 报告说: 文件锁代表整个Java虚拟机持有。它们不适合控制同一虚拟机内多个线程对文件的访问 多个并发线程可以安全地使用文件锁对象 我真的不明白:这是否意味着FileLock在同一个进程内的多个线程之间、在多个不同的进程之间或两者之间是安全的?它说,当您将这些对象视为普通Java对象时,它们是线程安全的,但它们不会阻止其他线程打开同一个文件。也就是说,当您查看他们提供的服务时,他们并不安全。再往下看: 此文件锁定

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

报告说:

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

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


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

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

再往下看:

此文件锁定API旨在直接映射到本机 底层操作系统的锁定功能。因此锁 保存在文件中的所有程序都应该可以访问 文件,而不管这些程序使用何种语言 书面的

这强烈表明其目的是在不同的过程之间使用

这一行:

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


建议如果您有一个具有多个线程的单进程,则不应使用它。在这种情况下,您可以改为使用
synchronized
部分或
ReadWriteLock

,因此,在进程之间同步文件是安全的,但在同一进程的线程之间同步文件是不安全的?是的,文档中是这么说的。但最近有一篇帖子说,一个人仍然设法在Java中使用文件锁。他并不依赖它们来阻止其他线程打开,而是作为建议锁——您可以显式地尝试获取文件锁,看看是否成功。不过,这是一种可疑的做法,存在跨平台的危险,并且明显滥用了低级文件锁。您没有了解到“不适合控制同一虚拟机内多个线程对文件的访问”的哪一部分?这是非常清楚的。