在具有2个Java节点的集群中同步进程执行

在具有2个Java节点的集群中同步进程执行,java,multithreading,synchronization,hazelcast,Java,Multithreading,Synchronization,Hazelcast,我有一个有2个节点的集群和一个共享文件系统。每个节点都有一个定期运行的java进程。该进程访问文件系统并处理一些文件,处理后删除这些文件。 这里的问题是,只有一个调度进程应该访问这些文件。如果第一个进程运行,另一个进程应该跳过执行 我解决此问题的第一次尝试是创建一个隐藏文件.lock . 当第一个进程开始执行时,它应该移动文件 进入另一个文件夹并开始处理文件。当另一个 计划进程首先检查.lock 文件存在,如果不存在,进程将跳过执行。 当第一个进程完成执行时,它移动.lock 文件返回到其原始

我有一个有2个节点的集群和一个共享文件系统。每个节点都有一个定期运行的java进程。该进程访问文件系统并处理一些文件,处理后删除这些文件。
这里的问题是,只有一个调度进程应该访问这些文件。如果第一个进程运行,另一个进程应该跳过执行

  • 我解决此问题的第一次尝试是创建一个隐藏文件
    .lock
    . 当第一个进程开始执行时,它应该移动文件 进入另一个文件夹并开始处理文件。当另一个 计划进程首先检查
    .lock
    文件存在,如果不存在,进程将跳过执行。 当第一个进程完成执行时,它移动
    .lock
    文件返回到其原始文件夹。我用的是 方法使用
    原子移动
    选项,但经过一定时间后 我的行为出人意料
  • 我的第二次尝试是使用分布式锁,如
    Hazelcast
    。我做了一些测试,看起来还可以,但是对于这么简单的任务来说,这个解决方案似乎有点复杂
我的问题是:对于这个问题有没有其他更聪明/更简单的解决方案,或者我唯一的选择是使用
Hazelcast
?你将如何解决这个问题