不同 JVM 之间的 Java 同步

2022-09-04 01:37:36

我正在处理的项目将触发各种异步作业来执行一些工作。随着我对它的深入研究,这些异步作业实际上是作为单独的JVM(单独的java进程)运行的。这是否意味着如果我需要在这些进程之间进行同步,我将无法使用以下任何一项:

  • 同步方法/块
  • 实现的任何锁java.util.concurrent.locks

因为在我看来,它们都是线程级别的?

Java是否像进程之间的信号量一样支持IPC?


答案 1

没错。您不能使用任何标准同步机制,因为它们正在处理一个 JVM。

解决 方案

  1. 您可以使用 java 7 中引入的文件锁。
  2. 可以通过数据库实体使用同步。
  3. 像Terracota这样已经实施的解决方案之一可能会有所帮助
  4. 重新思考您的设计。如果您是Java世界的初学者,请尝试与更有经验的工程师进行详细交谈。你的问题表明,恕我直言,你只是在走错路。

答案 2

您可以使用关键字、锁、原子对象等 - 但它们是 JVM 的本地对象。因此,如果你有两个JVM运行相同的程序,它们仍然可以同时运行相同的方法 - 每个JVM上一个,但不能更多。synchronizedsynchronized

解决 方案:

  • 提供分布式锁定

  • 您可以在文件系统或数据库上使用手动同步


推荐