File 在共享卷上锁定文件的常见做法是什么?

File 在共享卷上锁定文件的常见做法是什么?,file,synchronization,locking,distributed-computing,File,Synchronization,Locking,Distributed Computing,我正在使用Java编写一个分布式应用程序 我有一个共享卷V1,它将被机器M1和机器M2访问。机器M1在V1上写入文件,而机器M2将从V1读取文件 有时机器M2将尝试读取仍在由机器M1写入过程中的文件 也可能存在复杂的情况,即存在多个写入程序和多个读取器,它们都以同一个文件为目标 Java中处理此类情况的一些推荐常用做法是什么 取决于您的用例。将文件从一个应用程序传递到另一个应用程序的一种常见方法是将文件写入.tmp,然后重命名该文件,在写入后删除.tmp。重命名是原子的。这将防止M2在M1仍在写

我正在使用Java编写一个分布式应用程序

我有一个共享卷
V1
,它将被机器M1和机器
M2
访问。机器M1在
V1
上写入文件,而机器
M2
将从
V1
读取文件

有时机器
M2
将尝试读取仍在由机器
M1
写入过程中的文件

也可能存在复杂的情况,即存在多个写入程序和多个读取器,它们都以同一个文件为目标


Java中处理此类情况的一些推荐常用做法是什么

取决于您的用例。将文件从一个应用程序传递到另一个应用程序的一种常见方法是将文件写入.tmp,然后重命名该文件,在写入后删除.tmp。重命名是原子的。这将防止M2在M1仍在写入时读取文件

然而,我不清楚/担心你关于多个作者的陈述

对于多个读卡器,如果您有多个进程,每个进程都试图成为读取/处理文件的进程,则可以尝试让该进程尝试将文件重命名为.pid。这应该只在其中一个过程中成功


对于多个并发读卡器,只要完成后没有读卡器尝试删除文件,这通常是可以的。我相信这种情况下的结果将取决于系统。

如果旧文件已经存在,是否需要先删除它?或者我可以直接renmae tmp文件,让Java自动处理文件替换吗?