簡體   English   中英

如何使用Java進行多處理 - 而不是多線程

[英]How to use multiprocessing with Java - NOT multithreading

我一直在尋找一個簡單的基於java的多處理api,但找不到任何東西。

我有遺留代碼,我需要將其集成到我的Java應用程序中。 由於這個遺留(本機)代碼有時崩潰,整個jvm崩潰了。 所以我想要做的是在不同的進程(而不是線程!)中運行此代碼及其適配器。

在較新的java jdks中有ProcessBuilder,它允許您啟動一個新進程並為您提供In / Outputstream; 所以解決我的問題是可以手工完成的。 為此,您必須找到jvm的路徑並使用for process啟動它。 然后你必須使用流進行通信。

有什么東西可以接管這份工作嗎? 或者我真的需要手工完成嗎?

AFAIK,人們通常手工做到這一點。

問題在於沒有真正可移植的方式......難以(不可能)識別當前運行的JVM的啟動位置,以及JVM命令行選項是供應商,版本和(可能)的事實特定平台。

簡單的解決方案就是將用於啟動子JVM的JVM路徑和選項放入某個配置文件中。

您可以使用-Dprocess.name = $ 1並讓主類接受一些命令行參數。 您可以通過調用以下內容來調用:

java -cp $ CLASSPATH $ VM_ARGS $ MAIN_CLASS

並且您的VM_ARGS可以定義為

VM_ARGS =“ - Dprocess.name = $ 1”

FWIW,我在david.tribble.com/src/java/tribble/util/RuntimeExec.java編寫了一個替換類來處理大量的I / O流重定向錯誤。

您正在尋找稱為Java RMI(Remolt方法調用)的技術。

這允許一個JVM在另一個JVM中調用方法。 這可以在同一台機器上或通過網絡。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM