我正在处理的项目会触发各种异步作业来完成一些工作。在我看来,更多这些异步作业实际上是作为单独的JVM(单独的java进程)运行的。这是否意味着我不能够,如果我需要这些进程之间进行同步使用任何以下的:因为好像不同JVM之间的Java同步
- 同步方法/块
- 实现
java.util.concurrent.locks
任何锁对我来说他们都是线程级的?
Java是否为进程间的IPC信号提供支持?
我正在处理的项目会触发各种异步作业来完成一些工作。在我看来,更多这些异步作业实际上是作为单独的JVM(单独的java进程)运行的。这是否意味着我不能够,如果我需要这些进程之间进行同步使用任何以下的:因为好像不同JVM之间的Java同步
java.util.concurrent.locks
任何锁对我来说他们都是线程级的?
Java是否为进程间的IPC信号提供支持?
没错。您不能使用任何标准的同步机制,因为它们正在处理一个JVM。
解决方案
您可以使用关键字,锁,原子对象等 - 但它们对JVM是本地的。所以如果你有两个JVM运行相同的程序,他们仍然可以例如同时运行相同的方法 - 每个JVM上只运行一个,但不会更多。
解决方案:
terracotta提供分布式锁定
可以文件系统或数据库上使用手动同步
非常感谢您的意见。 – tytchong
我公顷已经实现了一个使用文件:FileBasedLock和使用共享数据库(jdbc)的IPC Semaphore实现的java IPC Lock实现:JdbcSemaphore。这两个实现都是spf4j的一部分。
如果你有一个动物园管理员例如采用从Apache Curator
看看基于动物园管理员锁定食谱我使用Redisson提供distributed lock同步不同的JVM的工作
谢谢!我们正在重复使用来自不同项目的相同架构,所以一些设计在我们的世界中可能没有意义。非常感谢您的意见,这非常有帮助。 – tytchong
5.您可以使用Java 1.4中引入的文件锁。 – EJP