我对 java 文件锁有一些困惑。
这是我的情况。
- 每个线程都可以读/写一个文件。
- 我的文件操作方法可以被多个线程同时调用
而且,我的目标很明确,线程不会并发写入文件。始终允许一个线程写入文件。
我的问题是
如果 FileOutputStream.write() 是线程安全的,我不必在我的代码中放置任何并发机制,因为 write() 处的代码将阻塞,直到释放锁定的文件。但是,当线程打开文件时,我的程序似乎不会阻塞(我不确定)
如果 FileOutputStream.write() 不是线程安全的,我将不得不编写额外的代码来使文件一次只能由线程访问。因此,我使用 FileChannel.lock() 来执行此操作。但是,与 JDK 文档不同的是,它不会阻塞而是抛出 OverlappingFileLockException。
我会很感激你的明确建议。