阻止在java(或scala)中创建文件
高级问题:在java(或scala)中是否存在一些API调用,可以让我在等待创建文件时阻止,而不进行轮询?或者是否有与文件系统相关的内容可以阻止
一些(基本上不相关的)细节:我有一个一次运行多个实例的流程,每个实例都在完成需要完成的工作列表的一部分。实例可能会在不同的时间开始,工作列表可能会在这段时间内发生变化,让流程之间明确地相互通信似乎并不可行*。这些进程之间的唯一通信是通过文件系统。因此,我希望有一种机制,使其中一个进程能够识别另一个进程已经开始(但尚未完成)当前进程所依赖的一项工作,并阻止它,等待另一个进程完成
*我真的不想让服务器运行来安排工作;这对我来说太复杂了。无论如何,服务器都需要轮询文件系统以获取更新,因为要完成的工作列表在文件系统中,并且可能随时更改
# 1 楼答案
自Java 7以来,有^{} (以及包
java.nio.file
中的相关类和接口),您可以使用它来监视文件系统事件,使用底层操作系统的功能,而不是直接轮询这些事件例如,您可以使用它来获取文件系统上正在创建、删除和修改的文件的事件
为了确保第二个进程在第一个进程完成写入之前不会拾取该文件,可以让第一个进程先为该文件使用一个临时名称,然后在完成后重命名该文件。第二个进程可以在重命名文件时收到通知
下面是一个例子: