2016-02-26 77 views
-1

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

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

当多个进程试图同时写入文件时,这工作正常。其他进程正在等待锁定释放。但是,其他进程仍然能够读取此文件,并且当他们打开InputStreamReader来读取此文件时,写入该文件的初始进程停止并且读取进程开始。我希望读取过程也是同步的。

有人可以帮助我这个。 (这将运行多个进程,并且还线程)

+0

看一看[documentation](https://docs.oracle.com/javase/8/docs/api/java/nio/channels/FileChannel.html#lock--)就会发现'lock( )'获得排他锁。 – VGR

回答

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值和文件专门共享。