2013-09-24 46 views
0

這可能有點......非正統的問題。我有多個應用程序在同一個JVM中運行,每個應用程序都在自己的類加載器中。這些應用程序需要與彼此進行通信(只有一點點),但我無法將自己的共享代碼添加到這些應用程序共享的類加載器中,所以我需要使用標準Java運行時提供的工具來完成這些工作。同一虛擬機中不同應用程序之間的通信

我認爲沿着使用System屬性的路線。然而,這將是很難使線程安全,但我想我可以使用​​在一個長期的隨機字符串。

還有更多選擇?


我想要的通信如下。這可能會影響合適的選項。

  • 每個應用按順序將其名稱放入共享隊列中。
  • 每個應用程序在同一時間開始輪詢隊列以查看其自己的名稱是否在頭部。如果是,它將執行長時間運行的初始化任務,然後從隊列中取出其名稱。
+2

TCP連接。只是忽視他們作爲共同居民的地位。 – bmargulies

+0

也許你可以使用管道: http://stackoverflow.com/questions/4974989/concurrent-read-write-of-named-pipe-in​​-java-on-windows – isnot2bad

回答

1

任何使用標準系統類加載器類型並應用同步的結構。字符串和整數地圖工作正常。

這意味着你也可以使用任何java.util.concurrent類,它們可能有適合你的問題的隊列。

+0

的問題是我不知道只需要使用默認提供的代碼,但也需要共享數據。我能想到的一些共享數據是系統屬性和interned字符串。 –

+0

我不明白這會是一個問題?只需要在地圖/隊列中插入字符串?當然,它確實有點難看... – krosenvold

+0

這不起作用,因爲這兩個應用程序無法訪問相同的數據結構,因爲沒有中央訪問點(類似於單例模式)。 – isnot2bad

相關問題