我正在用Java开发一个需要读/写锁的程序。该方案是多个进程可以同时写入文件。我使用以下行来锁定文件。
FileOutputStream fos = new FileOutputStream(file);
FileLock lock = fos.getChannel().lock;
当多个进程尝试同时写入文件时,这工作正常。其他进程正在等待,直到释放锁。但是,其他进程仍然能够读取此文件,当它们打开 InputStreamReader 以读取此文件时,写入此文件的初始进程将停止,读取进程将启动。我希望读取过程也同步。
有人可以帮我解决这个问题吗?(这在多个进程和线程上运行)
尝试使用另一种形式的FileChannel#lock
方法
public abstract FileLock lock(long position, long size, boolean shared)
将此方法与最后一个具有如下值true
shared
参数一起使用
FileLock lock = fos.getChannel().lock(0L, Long.MAX_VALUE, true);
如 JavaDoc 中的shared
参数所述
shared - true 表示请求共享锁,在这种情况下,此通道必须打开以进行读取(可能写入);false 请求独占锁,在这种情况下,此通道必须打开以进行写入(以及可能的读取)
默认情况下,该参数具有false
值,并且您的文件以独占方式共享。