如何在同一系统中共享两个java进程之间的变量/块?

时间:2014-03-28 01:03:55

标签: java

假设我有一个带有persondetails.java主要类的Java程序。

Person1运行persondetails.java以获取其详细信息。当第二个人试图访问同一系统中的同一个程序时,应该说某人已经在使用该程序,等到特定程序段在person1中完成。

如何在同一系统中的这两个Java进程之间进行通信?

2 个答案:

答案 0 :(得分:0)

如果我正确理解你的问题,你想要一个只允许一次运行一个实例的程序吗?我能想到两个可能性。

  • 使用某种"锁定"文件系统上的文件。执行程序时,它可以检查锁定文件是否存在,如果已存在则显示错误。如果锁定文件不存在,则会创建锁定文件并允许程序继续。您只需确保在程序完成时删除锁定文件。

  • 绑定到特定端口(不太可能已被使用)。当程序执行时,你会尝试绑定到端口,如果你可以继续程序,否则你会给出错误。

无论哪种方式,您只是使用锁定机制来检测其他进程正在运行。

使用文件系统锁定可能会有问题。例如,如果程序失败并意外停止执行,则锁定文件可能会保留并阻止将来执行该程序。同时绑定到端口来实现这一点实际上是对该功能的误用,并且可能以它自己的方式存在问题(端口已经在使用,或者应用程序不被允许绑定到端口)。 / p>

我个人会仔细考虑是否真的有必要在不同的进程之间进行这种锁定。我认为有利于避免使用我之前提到的任何一种选择。

答案 1 :(得分:0)

在非常基础的层面上,程序可以创建一个名为lock的文件。这个过程就像是

  1. 进程A检查是否存在锁定。
  2. 如果锁定不存在,则进程A创建锁定并开始工作。
    1. 在工作结束时,进程A删除锁定。
  3. 如果存在锁定,则进程A将等待,直到锁定不存在。
    1. 进程A可以轮询或等待中断或任何各种回调机制。