2

我对 java 文件锁有一些困惑。

这是我的情况。

  1. 每个线程都可以读/写一个文件。
  2. 我的文件操作方法可以被多个线程同时调用

而且,我的目标很明确,线程不会并发写入文件。始终允许一个线程写入文件。

我的问题是

  1. 如果 FileOutputStream.write() 是线程安全的,我不必在我的代码中放置任何并发机制,因为 write() 处的代码将阻塞,直到释放锁定的文件。但是,当线程打开文件时,我的程序似乎不会阻塞(我不确定)

  2. 如果 FileOutputStream.write() 不是线程安全的,我将不得不编写额外的代码来使文件一次只能由线程访问。因此,我使用 FileChannel.lock() 来执行此操作。但是,与 JDK 文档不同的是,它不会阻塞而是抛出 OverlappingFileLockException。

我会很感激你的明确建议。

4

1 回答 1

1

它不是线程安全的,您需要以编程方式确保安全。假设您的应用程序没有主要的性能要求,只需将相关代码放在同步块中。

于 2012-07-23T05:10:40.587 回答