gpt4 book ai didi

java - 并发文件移动访问

转载 作者:行者123 更新时间:2023-12-02 09:23:57 24 4
gpt4 key购买 nike

我有一个可执行的 jar 文件,它运行来处理源目录中的文件。当开始处理文件时,它被移动到“处理”目录中,最后移动到完成目录中。

此可执行 jar 文件通过 cron 作业运行

我遇到的问题是可执行 jar 运行重叠,即一次运行尚未完成而第二次运行已开始。

因此有 2 个或更多可执行 jar 同时运行来处理同一源目录中的文件。

这个想法是,一旦可执行 jar 运行将文件移动到“处理”目录中,该文件对于源目录中运行的另一个可执行 jar 将不可见。

但是,似乎有 2 个或更多可执行 jar 运行正在获取源目录中的文件并开始处理该文件。结果是,只有一个可执行的 jar 运行能够完成该文件的处理,而其他认为对该文件具有独占访问权限的运行则失败,因为该文件不再存在。

我正在使用 java.nio.file 包中的 Files 类中提供的 Files.move( srcPath, targetPath) 在目录之间移动文件。

关于如何确保一次只有一个可执行 jar 运行处理一个文件,有什么建议吗?

谢谢

皮特

最佳答案

有关java.nio.channels.FileLock的好示例,请参阅How can I lock a file using java (if possible)

在处理每个srcPath之前对其进行独占锁定。

更一般地说,如上所述,确保只有程序的实例在运行。创建一个特定的锁定文件,您从头到尾都保持独占访问权限。使用 tryLock() 并在无法获取它时退出(因为这意味着另一个实例已经拥有它)。

关于java - 并发文件移动访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58476843/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com