我一直在为简单的基于java的多处理寻找API,但找不到任何东西。
我有遗留代码,我需要将其集成到我的java应用程序中。由于这个遗留(本机)代码有时崩溃,整个jvm崩溃了。所以我想要做的是在不同的进程(而不是线程!)中运行此代码及其适配器。
在新的java jdks中有ProcessBuilder,它允许你启动一个新进程并为你提供一个In / Outputstream;所以解决我的问题是可以手工完成的。为此,您必须找到jvm的路径并使用for process启动它。然后你必须使用流进行通信。
是否有接管这份工作的东西?或者我真的需要手工完成吗?
答案 0 :(得分:2)
AFAIK,人们通常手工做这件事。
问题在于没有真正可移植的方式......难以(不可能)识别当前正在运行的JVM的启动位置,以及JVM命令行选项是供应商,版本和(可能)特定于平台。
简单的解决方案就是将用于启动子JVM的JVM路径和选项放入某个配置文件中。
答案 1 :(得分:0)
您可以使用-Dprocess.name = $ 1并让主类接受一些命令行参数。您可以通过调用以下内容来调用:
java -cp $ CLASSPATH $ VM_ARGS $ MAIN_CLASS
并且您的VM_ARGS可以定义为
VM_ARGS =“ - Dprocess.name = $ 1”
答案 2 :(得分:0)
FWIW,我在david.tribble.com/src/java/tribble/util/RuntimeExec.java
编写了一个替换类来处理大量的I / O流重定向问题。答案 3 :(得分:0)
您正在寻找名为Java RMI(远程方法调用)的技术。
这允许一个JVM在另一个JVM中调用方法。这可以在同一台机器上或通过网络。