不同JVM之间的Java同步

tyt*_*ong 12 java synchronization process

我正在研究的项目会触发各种异步工作来完成一些工作.在我看来,这些异步作业实际上是作为单独的JVM运行(单独的Java进程).这是否意味着如果我需要在这些进程之间进行同步,我将无法使用以下任何一项:

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

因为在我看来他们都是线程级的?

Java是否像流程之间的信号量一样为IPC提供支持?

Ale*_*exR 12

那就对了.您不能使用任何标准同步机制,因为它们正在使用一个JVM.

解决方案

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


Tom*_*icz 7

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

解决方案:

  • 提供分布式锁定

  • 如此

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