用于多进程读写的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文件锁[重复]的主要内容,如果未能解决你的问题,请参考以下文章
C#使用读写锁三句代码简单解决多线程并发写入文件时提示“文件正在由另一进程使用,因此该进程无法访问此文件”的问题