2012-05-16 77 views
10

我正在处理的项目会触发各种异步作业来完成一些工作。在我看来,更多这些异步作业实际上是作为单独的JVM(单独的java进程)运行的。这是否意味着我不能够,如果我需要这些进程之间进行同步使用任何以下的:因为好像不同JVM之间的Java同步

  • 同步方法/块
  • 实现java.util.concurrent.locks

任何锁对我来说他们都是线程级的?

Java是否为进程间的IPC信号提供支持?

回答

10

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

解决方案

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

谢谢!我们正在重复使用来自不同项目的相同架构,所以一些设计在我们的世界中可能没有意义。非常感谢您的意见,这非常有帮助。 – tytchong

+1

5.您可以使用Java 1.4中引入的文件锁。 – EJP

0

它们都是线程级的?

这是正确的,​​等只能在单个进程的上下文中工作。

Java是否为进程间的IPC信号提供支持?

在Java进程之间实现通信的一种方法是使用RMI

+0

谢谢我会考虑RMI。 – tytchong

7

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

解决方案:

  • 提供分布式锁定

  • 以及

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

+0

非常感谢您的意见。 – tytchong