【问题标题】:Acquring read/write lock in Java using FileLock使用 FileLock 在 Java 中获取读/写锁
【发布时间】:2016-02-26 23:22:02
【问题描述】:

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

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

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

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

【问题讨论】:

标签: java multithreading locking fileoutputstream filelock


【解决方案1】:

尝试使用另一种形式的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参数所述

shared - true 请求共享锁,在这种情况下,此通道必须打开以供读取(可能还有写入); false 请求排他锁,在这种情况下,此通道必须打开以供写入(可能还有读取)

默认情况下,该参数具有false 值,并且您的文件是独占共享的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-20
    • 1970-01-01
    相关资源
    最近更新 更多