使用FileLock在Java中获取读/写锁

时间:2016-02-26 23:22:03

标签: java multithreading locking fileoutputstream filelock

我正在研究Java中需要读/写锁定的程序。该场景是多个进程可以同时写入文件。我使用以下行来锁定文件。

FileOutputStream fos = new FileOutputStream(file);
FileLock lock = fos.getChannel().lock;

当多个进程尝试同时写入文件时,此方法正常。其他进程正在等待锁定被释放。但是,其他进程仍然能够读取此文件,并且当它们打开InputStreamReader以读取此文件时,写入此文件的初始进程将停止,并且读取进程将启动。我希望读取过程也同步。

有人可以帮我解决这个问题。 (这可以在多个进程和线程上运行)

1 个答案:

答案 0 :(得分:0)

尝试使用其他形式的FileChannel#lock方法

public abstract FileLock lock(long position, long size, boolean shared)

将此方法与最后shared参数一起使用true值,如此

FileLock lock = fos.getChannel().lock(0L, Long.MAX_VALUE, true);

如JavaDoc中描述的shared参数

  

共享 - true 以请求共享锁定,在这种情况下,此通道必须打开才能读取(并可能写入); false 请求独占锁定,在这种情况下,此通道必须打开才能写入(并可能读取)

默认情况下,参数的值为false,您的文件将独占共享。