不同JVM之间的Java同步
我正在从事的项目将触发各种异步作业来做一些工作。随着我深入了解,这些异步作业实际上是作为单独的JVM(单独的java进程)运行的。这是否意味着如果我需要在这些进程之间进行同步,我将无法使用以下任何一项:不同JVM之间的Java同步,java,synchronization,process,terracotta,hazelcast,Java,Synchronization,Process,Terracotta,Hazelcast,我正在从事的项目将触发各种异步作业来做一些工作。随着我深入了解,这些异步作业实际上是作为单独的JVM(单独的java进程)运行的。这是否意味着如果我需要在这些进程之间进行同步,我将无法使用以下任何一项: 同步方法/块 实现java.util.concurrent.locks 因为在我看来它们都是线程级别的 Java是否支持进程之间类似IPC的信号量?没错。您不能使用任何标准的同步机制,因为它们工作在一个JVM中 解决方案 您可以使用Java7中引入的文件锁 您可以通过数据库实体使用同步 像T
- 同步方法/块
- 实现
java.util.concurrent.locks
Java是否支持进程之间类似IPC的信号量?没错。您不能使用任何标准的同步机制,因为它们工作在一个JVM中 解决方案
synchronized
etc只在单个进程的上下文中工作
Java是否支持进程之间类似IPC的信号量
实现Java进程之间通信的一种方法是使用。您可以使用
synchronized
关键字、锁、原子对象等,但它们是JVM的本地对象。因此,如果有两个JVM运行相同的程序,它们仍然可以(例如)同时运行相同的synchronized
方法-每个JVM上一个,但不能多个
解决方案:
- 提供分布式锁定
- 也
- 您可以在文件系统或数据库上使用手动同步
如果您有zookeeper实例,请查看我使用提供的基于zookeeper的锁配方来同步不同JVM的工作,谢谢!我们正在使用来自不同项目的相同体系结构,因此一些设计在我们的世界中可能没有意义。非常感谢你的投入,这是非常有帮助的。您可以使用Java1.4中引入的文件锁。