我正在使用Java编写分布式应用程序。
我有一个共享卷V1
,它将由机器M1和机器M2
访问。机器M1在V1
上写入文件,而机器M2
将从V1
读取文件。
有时机器M2
将尝试读取仍在由机器M1
编写的文件中。
可能还有一些复杂的案例,其中有多个作者和多个读者,都是针对同一个文件的。
Java中有哪些常见的常见做法来处理此类案例?
答案 0 :(得分:1)
取决于您的用例。将文件从一个应用程序移交给另一个应用程序的常用方法是将文件写为.tmp,然后重命名该文件,完成写入后删除“.tmp”。重命名是原子的。当M1仍在写入时,这可以防止M2读取文件。
但是,我不清楚/担心你对多位作家的陈述。
对于多个读者,如果您有多个进程,每个进程都尝试成为读取/处理文件的ONE,您可以尝试让进程尝试将文件重命名为.pid。这应该只对其中一个进程成功。
对于多个并发读者,这通常是可以的,只要没有读者在完成时尝试删除该文件。我相信在这种情况下的结果将取决于系统。