Java ProcessBuilder用于启动多个Java进程。

3

如果给定相同的Main.class、参数和VM选项,我能否生成多个不同的JVM?是否可以使用ProcessBuilder来实现?


好问题,我现在也很好奇。 - Panther
我也是。我在这里和那里找到了一些示例代码,但没有一个真正可行的 :( - Katerina A.
你所说的“不同的JVM”是指同一JVM安装的多个实例,还是指JVM 1.6、JVM 7、JVM 8等不同版本? - Korashen
同一JVM安装的多个实例。 - Katerina A.
1个回答

2

下面是使用Process启动10个不同JVM进程的基本示例:

   for (int i = 0; i < 10; i++) {
            new Thread(new Runnable() {

                public void run() {
                    try {
                        //start a new jvm with 256m of memory with the MyClass passing 2 parameters
                        String cmd = "java -Xmx256M -cp myjar.jar com.mymainclass.MyClass par1 par2";
                        Process p = Runtime.getRuntime().exec(cmd);
                        BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
                        String line = br.readLine();
                        while (line != null) {
                            line = br.readLine();
                        }
                        br = new BufferedReader(new InputStreamReader(p.getErrorStream()));
                        line = br.readLine();
                        while (line != null) {
                            line = br.readLine();
                        }
                    } catch (IOException e) {
                    }

                }
            }).start();
        }

那么我不能利用从同一个jar文件中执行所有操作的优势,以便不必引用它并复制所有环境参数和参数吗? - Katerina A.
2
你应该使用Apache Commons Exec来避免在Java中执行外部进程时出现常见错误。 - Gilberto Torrezan
1
@KaterinaA。这个过程是在一个干净的新环境中进行的,不会使用当前环境中的任何内容...这就像您打开提示符并输入命令一样。 - fmodos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接