java多进程_详解Java中多进程编程的实现

本文介绍了Java中创建多进程的两种方式:使用Runtime的exec()方法和ProcessBuilder的start()方法。详细讲解了ProcessBuilder类的功能,包括命令、环境、工作目录和错误流重定向属性。还提到了Runtime类在多进程编程中的作用,以及Process类如何控制和获取子进程信息。文章以Java代码示例展示了如何执行和管理子进程。
摘要由CSDN通过智能技术生成

1.Java进程的创建Java提供了两种方法用来启动进程或其它程序:

(1)使用Runtime的exec()方法

(2)使用ProcessBuilder的start()方法

1.1 ProcessBuilder   ProcessBuilder类是J2SE 1.5在java.lang中新添加的一个新类,此类用于创建操作系统进程,它提供一种启动和管理进程(也就是应用程序)的方法。在J2SE 1.5之前,都是由Process类处来实现进程的控制管理。

每个 ProcessBuilder 实例管理一个进程属性集。start() 方法利用这些属性创建一个新的 Process 实例。start() 方法可以从同一实例重复调用,以利用相同的或相关的属性创建新的子进程。

每个进程生成器管理这些进程属性:

命令 是一个字符串列表,它表示要调用的外部程序文件及其参数(如果有)。在此,表示有效的操作系统命令的字符串列表是依赖于系统的。例如,每一个总体变量,通常都要成为此列表中的元素,但有一些操作系统,希望程序能自己标记命令行字符串——在这种系统中,Java 实现可能需要命令确切地包含这两个元素。

环境 是从变量 到值 的依赖于系统的映射。初始值是当前进程环境的一个副本(请参阅 System.getenv())。

工作目录。默认值是当前进程的当前工作目录,通常根据系统属性 user.dir 来命名。

redirectErrorStream 属性。最初,此属性为 false,意思是子进程的标准输出和错误输出被发送给两个独立的流,这些流可以通过 Process.getInputStream() 和 Process.getErrorStream() 方法来访问。如果将值设置为 true,标准错误将与标准输出合并。这使得关联错误消息和相应的输出变得更容易。在此情况下,合并的数据可从 Process.getInputStream() 返回的流读取,而从 Process.getErrorStream() 返回的流读取将直接到达文件尾。

修改进程构建器的属性将影响后续由该对象的 start() 方法启动的进程,但从不会影响以前启动的进程或 Java 自身的进程。大多数错误检查由 start() 方法执行。可以修改对象的状态,但这样 start() 将会失败。例如,将命令属性设置为一个空列表将不会抛出异常,除非包含了 start()。

注意,此类不是同步的。如果多个线程同时访问一个 ProcessBuilder,而其中至少一个线程从结构上修改了其中一个属性,它必须 保持外部同步。

构造方法摘要

ProcessBuilder(List command)

利用指定的操作系统程序和参数构造一个进程生成器。

ProcessBuilder(String... command)

利用指定的操作系统程序和参数构造一个进程生成器。

方法摘要

List command()

返回此进程生成器的操作系统程序和参数。

ProcessBuilder command(List command)

设置此进程生成器的操作系统程序和参数。

ProcessBuilder command(String... command)

设置此进程生成器的操作系统程序和参数。

File directory()

返回此进程生成器的工作目录。

ProcessBuilder directory(File directory)

设置此进程生成器的工作目录。

Map environment()

返回此进程生成器环境的字符串映射视图。

boolean redirectErrorStream()

通知进程生成器是否

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值