Java创建子进程:Runtime.exec() 实例解析

1星 需积分: 50 11 下载量 46 浏览量 更新于2024-09-09 收藏 33KB DOC 举报
"Java程序多进程运行模式的实例分析,主要讲解如何在Java中实现多进程操作,包括使用Runtime类的exec方法启动Java子进程以及处理子进程的输出信息。" 在Java编程中,通常一个Java应用程序运行在一个单一的Java虚拟机(JVM)实例中。然而,有时我们需要在独立的进程中运行多个Java程序,以实现并发执行或增加程序的稳定性。这样做可以确保即使一个进程出现异常,也不会影响其他进程的正常运行。 Java提供了一种方式,通过`Runtime`类的`exec`方法来创建新的进程。`exec`方法可以执行操作系统命令,例如启动一个新的Java程序。以下是一个简单的例子,展示如何使用`exec`方法来运行另一个Java类: ```java // Test1.java 文件 public class Test1 { public static void main(String[] args) { try { FileOutputStream fOut = new FileOutputStream("c:\\Test1.txt"); fOut.close(); System.out.println("被调用成功!"); } catch (IOException e) { e.printStackTrace(); } } } // Test_Exec.java 文件 public class Test_Exec { public static void main(String[] args) { Runtime run = Runtime.getRuntime(); try { Process p = run.exec("java Test1"); } catch (IOException e) { e.printStackTrace(); } } } ``` 在这个例子中,`Test_Exec`类会启动一个新的进程来执行`Test1`类。运行`Test_Exec`后,我们发现`Test1.txt`文件被创建,说明`Test1`的`main`方法确实被执行了。然而,由于子进程没有自己的控制台,`Test1`中的`System.out.println`输出不会显示在`Test_Exec`的控制台上。 为了捕获并显示子进程的输出,我们需要访问子进程的输入/输出流。`Process`对象提供了`getInputStream`和`getErrorStream`方法,分别用于获取标准输出和错误输出。这样,我们可以在父进程中读取子进程的输出,将它们重定向到父进程的控制台: ```java Process p = run.exec("java Test1"); BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream())); String line; while ((line = input.readLine()) != null) { System.out.println(line); } input.close(); ``` 这段代码会捕获并打印子进程`Test1`的输出。类似地,如果需要处理错误输出,可以使用`getErrorStream`。这种方式使得我们可以在父进程中管理和监控子进程的输出,保证了信息的可见性。 Java中的多进程运行模式主要依赖于`Runtime.exec`方法,它可以启动新的JVM实例执行Java程序。同时,通过处理子进程的输入/输出流,我们可以确保父子进程之间的通信和数据交换。这种方式在需要独立运行多个Java应用或者需要在不同进程中执行任务的场景中非常有用。