用于多进程读写的Java文件锁[重复]

Posted

技术标签:

【中文标题】用于多进程读写的Java文件锁[重复]【英文标题】:Java file lock for read and write with multiple processes [duplicate] 【发布时间】:2020-06-27 08:22:38 【问题描述】:

在我的应用程序中,多个进程正在尝试访问文件以进行读写。每个应用程序都有一个线程。我需要确保没有 2 个进程同时访问该文件。我在 JDK 中使用 FileLock。这可以正常工作,当一个进程获得锁并且其他进程尝试访问文件(用于读取或写入)时抛出异常,说明文件已被其他进程锁定。

现在我需要确保,对于第二个进程,而不是抛出异常线程应该等到第一个进程释放锁,一旦锁被释放,继续其工作。

我该怎么做。所以,胖子我一直想不通这样做。

【问题讨论】:

异常处理有什么问题? 【参考方案1】:

您是否考虑过实施以下类似的方法?

while (true) 
   try to acquire lock - 
     // if the lock is acquired break the loop     

    catch (Exception) 
     log... exception
     possibly wait for sometime
  

【讨论】:

可能是,因为伪代码或者while (true) 当多个进程都试图获取同一个文件的锁定时,您希望这段代码如何工作? 两者都将继续循环,最终其中一个将能够获得锁。如果获取锁实现不是线程安全的,则必须将其保存在同步块中以确保线程安全

以上是关于用于多进程读写的Java文件锁[重复]的主要内容,如果未能解决你的问题,请参考以下文章

37. Python 多进程锁 多进程共享内存

day37——多进程锁多进程共享内存

C#使用读写锁三句代码简单解决多线程并发写入文件时提示“文件正在由另一进程使用,因此该进程无法访问此文件”的问题

记录上锁(字节范围锁,特例:锁住文件的某一部分或者整个文件)

8-1多进程锁和共享内存

java多线程---读写锁ReadWriteLock