簡體   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