我对java文件锁有一些困惑。
这是我的情况。
并且,我的目标很明确,没有线程并发写文件。总是允许一个线程写一个文件。
我的问题是
如果FileOutputStream.write()是线程安全的,我不必在我的代码中放置任何并发机制,因为write()处的代码将阻塞,直到锁定文件被释放。但是,当一个线程打开一个文件时,我的程序似乎不会阻塞(我不确定)
如果FileOutputStream.write()不是线程安全的,我将不得不编写额外的代码来使文件一次只能被线程访问。因此,我使用FileChannel.lock()来执行此操作。但是,与JDK文档不同,它不会阻止但抛出OverlappingFileLockException。
我很感激你明确的建议。
答案 0 :(得分:1)
它不是线程安全的,您需要以编程方式确保安全。假设您的应用没有重要的性能要求,只需将相关代码放在同步块中即可。