我们常常听到的比较多是如何创建多线程,很少听到如何创建多进程,今天我们来讲解一下如何创建多进程

ProcessBuilder类

ProcessBuilder类是J2SE 1.5在Java.lang中新添加的一个新类,此类用于创建操作系统进程,它提供一种启动和管理进程(也就是应用程序)的方法。在J2SE 1.5之前,都是由Process类处来实现进程的控制管理。每个 ProcessBuilder 实例管理一个进程属性集。start() 方法利用这些属性创建一个新的 Process 实例。start() 方法可以从同一实例重复调用,以利用相同的或相关的属性创建新的子进程。

常用方法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()

//          通知进程生成器是否合并标准错误和标准输出。

ProcessBuilder redirectErrorStream(boolean redirectErrorStream)

//          设置此进程生成器的 redirectErrorStream 属性。

Process start()

//          使用此进程生成器的属性启动一个新进程。

Process类

使用Process process = processBuilder.start();启动后,会返回一个Process类的实例代表启动的进程,该实例可用来控制进程并获得相关信息。Process 类提供了执行从进程输入、执行输出到进程、等待进程完成、检查进程的退出状态以及销毁(杀掉)进程的方法:void destroy()

//          杀掉子进程。(一般情况下,该方法并不能杀掉已经启动的进程,不用为好。)

int exitValue()

//          返回子进程的出口值。(只有启动的进程执行完成、或者由于异常退出后,exitValue()方法才会有正常的返回值,否则抛出异常。)

InputStream getErrorStream()

//          获取子进程的错误流。(如果错误输出被重定向,则不能从该流中读取错误输出。  )

InputStream getInputStream()

//          获取子进程的输入流。(可以从该流中读取进程的标准输出。  )

OutputStream getOutputStream()

//          获取子进程的输出流。(写入到该流中的数据作为进程的标准输入。)

int waitFor()

//          导致当前线程等待,如有必要,一直要等到由该 Process 对象表示的进程已经终止。

示例

ProcessBuilderTest.java 类import java.io.*;

import java.util.*;

public class ProcessBuilderTest {

public static void main(String[] args) {

try {

ProcessBuilder processBuilder = new ProcessBuilder();

processBuilder.redirectErrorStream(true);

processBuilder.command(new File(System.getProperty("java.home"), "bin/java").toString(), "ProcessTest");

processBuilder.redirectErrorStream(true);

processBuilder.directory(new File(ProcessBuilderTest.class.getResource("/").getPath()));

Process process = processBuilder.start();

Scanner scanner = new Scanner(process.getInputStream());

while (scanner.hasNextLine()) {

System.out.println("Process Logger : " + scanner.nextLine());

}

scanner.close();

}catch (IOException e) {

e.printStackTrace();

}

}

}

ProcessTest.java 类import java.util.Map;

public class ProcessTest {

public static void main(String[] args) {

for (Map.Entry entry : System.getProperties().entrySet()) {

System.out.println(entry.getKey() + "   ==> " + entry.getValue());

}

}

}

运行结果:localhost:test meyer$ java ProcessBuilderTest

Process Logger : java.runtime.name   ==> Java(TM) SE Runtime Environment

Process Logger : sun.boot.library.path   ==> /Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib

Process Logger : java.vm.version   ==> 25.111-b14

Process Logger : gopherProxySet   ==> false

Process Logger : java.vm.vendor   ==> Oracle Corporation

Process Logger : java.vendor.url   ==> http://java.oracle.com/

Process Logger : path.separator   ==> :

Process Logger : java.vm.name   ==> Java HotSpot(TM) 64-Bit Server VM

Process Logger : file.encoding.pkg   ==> sun.io

Process Logger : user.country   ==> CN

Process Logger : sun.java.launcher   ==> SUN_STANDARD

Process Logger : sun.os.patch.level   ==> unknown

Process Logger : java.vm.specification.name   ==> Java Virtual Machine Specification

Process Logger : user.dir   ==> /Users/meyer/Documents/workspace/me/test

Process Logger : java.runtime.version   ==> 1.8.0_111-b14

Process Logger : java.awt.graphicsenv   ==> sun.awt.CGraphicsEnvironment

Process Logger : java.endorsed.dirs   ==> /Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/endorsed

Process Logger : os.arch   ==> x86_64

Process Logger : java.io.tmpdir   ==> /var/folders/3d/2_m0wvfs0yq7_tq0b4_r34rc0000gn/T/

Process Logger : line.separator   ==>

Process Logger :

Process Logger : java.vm.specification.vendor   ==> Oracle Corporation

Process Logger : os.name   ==> Mac OS X

Process Logger : sun.jnu.encoding   ==> UTF-8

Process Logger : java.library.path   ==> /Users/meyer/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.

Process Logger : java.specification.name   ==> Java Platform API Specification

Process Logger : java.class.version   ==> 52.0

Process Logger : sun.management.compiler   ==> HotSpot 64-Bit Tiered Compilers

Process Logger : os.version   ==> 10.12.2

Process Logger : user.home   ==> /Users/meyer

Process Logger : user.timezone   ==>

Process Logger : java.awt.printerjob   ==> sun.lwawt.macosx.CPrinterJob

Process Logger : file.encoding   ==> UTF-8

Process Logger : java.specification.version   ==> 1.8

Process Logger : java.class.path   ==> .

Process Logger : user.name   ==> meyer

Process Logger : java.vm.specification.version   ==> 1.8

Process Logger : sun.java.command   ==> ProcessTest

Process Logger : java.home   ==> /Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre

Process Logger : sun.arch.data.model   ==> 64

Process Logger : user.language   ==> zh

Process Logger : java.specification.vendor   ==> Oracle Corporation

Process Logger : awt.toolkit   ==> sun.lwawt.macosx.LWCToolkit

Process Logger : java.vm.info   ==> mixed mode

Process Logger : java.version   ==> 1.8.0_111

Process Logger : java.ext.dirs   ==> /Users/meyer/Library/Java/Extensions:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/ext:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java

Process Logger : sun.boot.class.path   ==> /Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/sunrsasign.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/classes

Process Logger : java.vendor   ==> Oracle Corporation

Process Logger : file.separator   ==> /

Process Logger : java.vendor.url.bug   ==> http://bugreport.sun.com/bugreport/

Process Logger : sun.io.unicode.encoding   ==> UnicodeBig

Process Logger : sun.cpu.endian   ==> little

Process Logger : sun.cpu.isalist   ==>

localhost:test meyer$

java多进程_Java中创建多进程相关推荐

  1. Java 在PPT中创建SmartArt图形、读取SmartArt图形中的文本

    一.概述及环境准备 SmartArt 图形通过将文字.图形从多种不同布局.组合来表现内容和观点的逻辑关系,能够快速.有效地传达设计者的意图和信息.这种图文表达的视觉表示形式常用于PPT,Word,Ex ...

  2. java文件不存在就创建_Java中创建并写文件的5种方式

    阅读本文前,请您先点击上面的蓝色字体,再点击"关注",这样您就可以继续免费收到最新文章了.每天都有分享.完全是免费订阅,请放心关注.注:本文转载自网络,不代表本平台立场,仅供读者参 ...

  3. java 获取对象方法有哪些方法有哪些方法有哪些_Java中创建String 对象的方法有哪些...

    Java中创建String 对象的方法有哪些 发布时间:2020-11-25 16:45:30 来源:亿速云 阅读:71 作者:Leah 这篇文章将为大家详细讲解有关Java中创建String 对象的 ...

  4. java 给对象创建实例_Java中创建(实例化)对象的五种方式

    Java中创建(实例化)对象的五种方式1.用new语句创建对象,这是最常见的创建对象的方法. 2.通过工厂方法返回对象,如:String str = String.valueOf(23); 3.运用反 ...

  5. java 创建文件夹的方法_java中创建文件夹的方法

    java中创建文件夹的方法 发布时间:2020-06-10 11:46:49 来源:亿速云 阅读:461 作者:Leah 这篇文章给大家分享的是java中创建文件夹的方法.小编觉得挺实用的,因此分享给 ...

  6. java中写入文件_java中创建、写入文件的5种方式

    在java中有很多的方法可以创建文件写文件,你是否真的认真的总结过?下面笔者就帮大家总结一下java中创建文件的五种方法. Files.newBufferedWriter(Java 8) Files. ...

  7. java在linux创建文件_Java中创建并写文件的5种方式

    导读 在java中有很多的方法可以创建文件写文件,你是否真的认真的总结过?下面笔者就帮大家总结一下java中创建文件的五种方法. 在java中有很多的方法可以创建文件写文件,你是否真的认真的总结过?下 ...

  8. java 怎么创建窗体_java中创建窗体的方法

    java中创建窗体的方法 发布时间:2020-06-16 11:26:04 来源:亿速云 阅读:102 作者:Leah 这篇文章给大家分享的是有关java中创建窗体的方法,小编觉得挺实用的,因此分享给 ...

  9. java中创建两种线程的方式_java中创建线程的两种方式有什么区别?

    *** 一.创建线程 1.继承Thread类 定义类继承Thread, 重写run()方法, 将线程中要执行的代码写在run()方法中 创建该类对象, 调用start()方法就可以开启一条新线程, 新 ...

最新文章

  1. 神策数据:游戏企业如何做产品 A/B 测试?三大案例一次搞懂
  2. Mysql的coalesce
  3. 游戏类型区分(做游戏的朋友可以看看)
  4. 前端学习(1534):服务器和客户端传输
  5. 零基础学python看什么书好?
  6. 万物互联时代 如何用好智能家居这把双刃剑?
  7. 通达OA - 数据备份与恢复指南
  8. 万能地图下载器下载与安装教程
  9. Unity设置为中文
  10. 全国计算机城市排名,这五大城市教育资源全国领先,各城市优质高校排行榜一定要收藏!...
  11. 品牌连锁店5G/4G无线组网方案
  12. Error while bringing up minion for multi-master.
  13. hin2vec 异质信息网络表示学习 个人笔记
  14. Unity真实榴弹炮模拟(真正的大型榴弹炮实现)
  15. java计算机毕业设计新能源汽车租赁管理系统源程序+mysql+系统+lw文档+远程调试
  16. LCA——JD 3055 Nearest Common Ancestors
  17. nexus-基本使用
  18. Vue3 下拉刷新 的实现
  19. show warnings 查看警告
  20. 斗地主练习(按照斗地主的规则,完成洗牌发牌的动作。)

热门文章

  1. CSDN博客如何转载
  2. PyTorch系列入门到精通——autograd与逻辑回归
  3. 卷积神经网络——第一周 卷积神经网络基础——第四部分
  4. leetcode力扣49. 字母异位词分组
  5. axios get 跨域_axios网络交互应用-Vue
  6. 数据结构与算法 实验二:利用单链表(实现ADT)判断回文
  7. 机器学习、神经网络中不懂的函数及功能实现
  8. 对文件夹内所有文件批量命名
  9. Redis基础(六)——事务
  10. LeetCode刷题(32)