JAVA-多进程开发-创建等待进程

前言

        在项目中,为了实现“并发编程”(同时执行多个任务),就引入了“多进程编程”,把一个很大的任务,拆分成若干个很小的任务,创建多个进程,每个进程分别负责其中的一部分任务。

        这也带来了一些问题:创建/销毁进程,比较低效,所以就引入了线程,每个线程都是一个独立的执行流,一个进程包含了一个或多个线程,创建线程/销毁线程 比 创建进程/销毁进程 更高效。

        因此,在 Java 圈子中,大部分的并发编程都是通过多线程的方式实现的,但是进程也有线程比不上的优势 ---->  进程的独立性

        操作系统中,同一时刻运行着很多个进程,如果某一个进程挂了,不会影响其他的进程(每个进程有各自的地址空间),相比之下,由于多个线程共用一个进程的地址空间,某个线程挂了,就有可能会把整个进程都祸害掉

        所以对于使用进程还是线程实现并发编程,我们要根据项目的特性来考虑

多进程介绍

        站在操作系统的角度(如 Linux )提供了很多和多进程编程相关的接口,比如:进程创建,进程终止,进程等待,进程程序替换,进程间通信 ......

        而 Java 中对系统提供的这些操作进行了限制,最终给用户提供了两个操作:1.进程创建  2.进程等待

进程创建&等待

        创建出一个新的进程,让这个新的进程来执行一系列的任务,被创建出来的进程称为子进程,创建子进程的进程称为父进程

代码演示

/*** 测试进程的创建* */
public class TestExec {public static void main(String[] args) throws IOException, InterruptedException {// Runtime 采用了单例模式,只能有一个实例Runtime runtime=Runtime.getRuntime();//创建并运行了一个进程,相当于在控制台输入了 javac 运行Process process=runtime.exec("javac");// javac 是一个控制台程序,它的输出是输出到“标准输出”和“标准错误”这两个特殊文件中的//要想看到这个程序的运行结果,就要去获取“标准输出”和“标准错误”这两个特殊文件中的内容//为什么在 idea 中看不到上述进程运行的结果?//一个进程在启动的时候会自动的打开 3 个文件://  1.标准输入(对应键盘)//  2.标准输出(对应显示器)//  3.标准错误(对应显示器)//虽然子进程启动以后也打开了这 3 个文件,但是由于子进程没有和 idea 的终端关联,因此在 idea 中看不到子进程的输出,需要手动获取// 获取标准输出InputStream stdOutFrom=process.getInputStream();FileOutputStream stdOutTo=new FileOutputStream("stdOut.txt");while (true){int ch=stdOutFrom.read();if(ch==-1){break;}stdOutTo.write(ch);}stdOutFrom.close();stdOutTo.close();//获取标准错误InputStream stdErrFrom=process.getErrorStream();FileOutputStream stdErrTo=new FileOutputStream("stdError.txt");while (true){int ch=stdErrFrom.read();if(ch==-1){break;}stdErrTo.write(ch);}stdErrFrom.close();stdErrTo.close();//执行 Process 类的 waitFor 方法来实现进程的等待//父进程执行到 waitFor 方法时就会阻塞,阻塞到子进程执行完毕为止(和 Thread.join 是很像的)//返回的 exitCode 是退出码,退出码用于表示进程是否正确执行完毕,如果正确执行完毕就返回 0 ,非 0 代表进程出现异常int exitCode=process.waitFor();System.out.println(exitCode);}
}

       执行以上代码,可以得到空的 stdOut.txt 文件,与如下所示的 stdError.txt 文件,说明我们成功创建了一个进程,执行了 javac 命令

        注意,以上的演示代码相当于创建了一个进程执行了 javac 操作,相当于在控制器中输入了   javac 并执行,要是没有配置 jdk 的环境变量就得不了正确的结果,关于环境变量的配置推荐看

配置 JDK 环境变量(最简单)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/468920.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】计算节点个数和二叉树高度(C语言版)

数据结构——计算节点个数、二叉树高度 一、计算各种节点 (1)计算总节点:(2)计算单分支节点:(3)计算双分支节点: 二、计算二叉树高度 代码实现: 一、计算各种…

NSSCTF Round#18 RE GenshinWishSimulator WP

恶搞原神抽卡模拟器 看到软件的界面,大致有三种思路: 修改石头数量一直抽,如果概率正常肯定能抽到(但是估计设置的概率是0)在源码里找flag的数据把抽卡概率改成100%直接抽出来 Unity逆向,根据经验应该dnsp…

MySQL数据库⑩_视图+MySQL用户管理(增删查改)

目录 1. 视图的概念和规则限制 2. 视图的基本使用 2.1 创建视图 2.2 修改视图影响基表 2.3 修改基表影响视图 2.4 删除视图 3. MySQL用户管理 3.1 用户信息 3.2 创建用户 3.3 修改用户密码 3.4 删除用户 4. 用户权限 4.1 MySQL权限 4.2 给用户授权 4.3 回收权限…

Vue-自定义属性和插槽(五)

目录 自定义指令 基本语法 (全局&局部注册) 指令的值 练习:v-loading 指令封装 总结: 插槽(slot) 默认插槽 插槽 - 后备内容(默认值) 具名插槽 具名插槽基本语法: 具名插槽简化语法: 作…

单片机学习路线(简单介绍)

学习单片机对于电子爱好者和未来的嵌入式系统工程师来说是一段激动人心的旅程。单片机因其强大的功能、灵活性以及在各种智能设备中的广泛应用,成为了电子和计算机科学领域一个不可或缺的组成部分。如果你对如何开始这段旅程感到好奇,那么你来对地方了。…

SpringIOC之support模块ReloadableResourceBundleMessageSource

博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

【MySQL】待修改

外键约束 含义 外键:用来让两张表的数据之间建立连接,从而保证数据的完整性和一致性。 员工表emp(子表) idnameagejobsalaryentrydatemanageriddept_id1金庸66总裁200002000-01-01null52张无忌20项目经理125002005-12-05113杨…

【安装指南】图床神器之Picgo下载、安装详细教程

🌼一、概述 PicGo是一款开源的图片上传、管理工具,旨在帮助用户快速上传图片到云存储或图床,并提供链接方便在网页或其他应用中使用。它支持各种常见的图床服务商,如GitHub、七牛云、腾讯云等,并提供了简洁易用的界面和…

python3 中try 异常调试 raise 异常抛出

一、什么是异常? 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。 一般情况下,在Python无法正常处理程序时就会发生一个异常。 异常是Python对象,表示一个错误。 当Python脚本发生异常时我…

四、OpenAI之文本生成模型(Text Generation)

文本生成模型 OpenAI的文本生成模型(也叫做生成预训练的转换器(Generative pre-trained transformers)或大语言模型)已经被训练成可以理解自然语言、代码和图片的模型。模型提供文本的输出作为输入的响应。对这些模型的输入内容也被称作“提示词”。设计提示词的本质是你如何对…

响应式编程四Spring WebFlux高阶实战,2W字干货!!

响应式编程四Spring WebFlux高阶实战 WebFlux作为核心响应式服务器基础响应式Web内核响应式Web和MVC框架基于WebFlux的纯函数式Web基于WebClient的非阻塞跨服务通讯Spring Web Flux 和Spring Web MVC对比 WebFlux的应用基于微服务的系统 大文件上传Spring WebFlux数据库访问集成…

不要告诉我爸妈!三省吾身!保持健康的习惯——“早”读

三省吾身了? 引言代码第一篇 人民日报 不要告诉我爸妈第二篇 人民日报 【夜读】新的一年,保持健康的5个好习惯第三篇(跳) 人民日报 来啦 新闻早班车要闻社会政策 结尾 引言 我想我需要给我的文章再来点规范性的东西 让大家能够更好地阅读 比…