繁体   English   中英

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

[英]How can i share the variable/block between two java process in same system?

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

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

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

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

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

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

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

使用文件系统锁定可能会出现问题。 例如,如果程序失败并意外停止执行,则锁定文件可能会保留并阻止程序将来执行。 同时绑定到端口以完成此操作实际上是对该功能的滥用,并且可能以其自己的方式出现问题(端口已在使用中,或者不允许应用程序绑定到端口)。

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

在非常基本的级别上,该程序可以创建一个名为lock的文件。 该过程将类似于

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM