Java同时在线程之间访问文件

时间:2012-07-23 04:59:35

标签: java file concurrency blocking

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

这是我的情况。

  1. 每个线程都可以读/写一个文件。
  2. 我的文件操作方法可以由多个线程同时调用
  3. 并且,我的目标很明确,没有线程并发写文件。总是允许一个线程写一个文件。

    我的问题是

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

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

    3. 我很感激你明确的建议。

1 个答案:

答案 0 :(得分:1)

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