Java进程通讯
- 管道(Pipe):管道可用于具有亲缘关系进程间的通信,允许一个进程和另一个与它有共同祖先的进程之间进行通信。
创建子进程Java有两种方式//第一种
Runtime rt = Runtime.getRuntime();
Process process = rt.exec("java -jar app2.jar");
//第二种
ProcessBuilder pb = new ProcessBuilder("java", "-jar","app2.jar");
Process p = pb.start();第二种方式操作更方便,实例如下。
父进程App.classtry{
ProcessBuilder pb=new ProcessBuilder("java -jar app2.jar".split(" "));
pb.directory(new File("e:/temp/clean_day/jar/"));
//标准错误和输入流合并为输入流
pb.redirectErrorStream(true);
//创建子进程
Process p=pb.start(); //使用Process的输入流接收子进程发送的消息
BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream()));
//使用Process的输出流向子进程发送消息,并把PrintWriter设置为自动flush.
PrintWriter wr=new PrintWriter(new OutputStreamWriter(p.getOutputStream()),true);
String lineStr;
while((lineStr=br.readLine())!=null){
System.out.println("收到子进程的消息:"+lineStr);
//向子进程发送消息
wr.println(System.currentTimeMillis());
}
wr.close();
br.close();
}catch(Exception ex){
System.out.println(ex.getMessage());
}子进程App2.class
try{
System.out.println("子进程启动成功");
System.out.println(System.currentTimeMillis()); //利用标准输入来接收父进程发送的消息
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String lineStr;
while ((lineStr = br.readLine()) != null) {
System.out.println("child\t"+lineStr);
}
br.close();
}catch(Exception ex){
System.out.println(ex.getMessage());
} - (非进程,而是线程)PipedInputStream、PipedOutStream、PipedReader、PipedWriter管道流
public class App { public static void main(String[] args) {
PpWriter wr=new PpWriter();
PpReader rd=new PpReader(wr); Thread wrth=new Thread(wr);
wrth.start(); Thread rdth=new Thread(rd);
rdth.start();
}
} /**
* 管道写
* App.java:Temp
* 2015年3月26日
* @author kevin.zhai(韩旭)
*/
class PpWriter implements Runnable{
private PipedWriter pipedWriter; public PpWriter(){
this.pipedWriter=new PipedWriter();
} @Override
public void run() {
try {
while(true){
//因为读使用了readline,因此这里要换行
String sendStr=System.currentTimeMillis()+"\r\n";
this.pipedWriter.write(sendStr);
System.out.println("父发送:"+sendStr);
Thread.sleep(1000);
}
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
} public PipedWriter getPipedWriter() {
return pipedWriter;
}
} /**
* 管道读
* App.java:Temp
* 2015年3月26日
* @author kevin.zhai(韩旭)
*/
class PpReader implements Runnable{
private PipedReader pipedReader; public PpReader(PpWriter ppWriter){
try {
//读需要先和写建立连接,否则报异常:Pipe not connected
this.pipedReader=new PipedReader(ppWriter.getPipedWriter());
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void run() { try(BufferedReader br=new BufferedReader(this.pipedReader)){
while(true){
System.out.println("子接收:"+br.readLine());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Java进程通讯的更多相关文章
- android中跨进程通讯的4种方式
转自:http://blog.csdn.net/lyf_007217/article/details/8542359 帖子写的很好.看来一遍,试了一遍,感觉太有意义.必须转过来! android中跨进 ...
- Chris Richardson微服务翻译:构建微服务之微服务架构的进程通讯
Chris Richardson 微服务系列翻译全7篇链接: 微服务介绍 构建微服务之使用API网关 构建微服务之微服务架构的进程通讯(本文) 微服务架构中的服务发现 微服务之事件驱动的数据管理 微服 ...
- Android查缺补漏(IPC篇)-- 款进程通讯之AIDL详解
本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8436529.html 进程间通讯篇系列文章目录: Android查缺补漏(IP ...
- 故障重现, JAVA进程内存不够时突然挂掉模拟
背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...
- 死磕内存篇 --- JAVA进程和linux内存间的大小关系
运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...
- android 史上最简单易懂的跨进程通讯(Messenger)!
不需要AIDL也不需要复杂的ContentProvider,也不需要SharedPreferences或者共享存储文件! 只需要简单易懂的Messenger,它也称为信使,通过它可以在不同进程中传递m ...
- Linux下java进程CPU占用率高-分析方法
今天登陆同事的一台gateway 开始以为hive环境登陆不了了,仔细一看看了下是因为机器很卡,我每次等几秒没登陆就ctrl+c了,看了下是有个java进程cpu:340.4% mem:14.6% ...
- Linux下java进程CPU占用率高分析方法
Linux下java进程CPU占用率高分析方法 在工作当中,肯定会遇到由代码所导致的高CPU耗用以及内存溢出的情况.这种情况发生时,我们怎么去找出原因并解决. 一般解决方法是通过top命令找出消耗资源 ...
- Linux删除多个java进程的其中一个
一.背景: Linux后台运行了多个Java程序,进程名都是java. 执行pkill java会一次性杀掉所有的java进程. 二.解决思路: 先通过一定的检索条件,定位出指定的java进程 然后解 ...
随机推荐
- Angular - - form.FormController、ngModel.NgModelController
form.FormController FormController跟踪所有他所控制的和嵌套表单以及他们的状态,就像有效/无效或者脏值/原始. 每个表单指令创建一个FormController实例. ...
- [QT]简单介绍一下 *.pro、*.pri、*.prf、*.prl等四种文件
转自:http://blog.csdn.net/dbzhang800/article/details/6348432 简单介绍一下 *.pro.*.pri.*.prf.*.prl等四种文件:干嘛用的, ...
- xhtmlrenderer渲染pdf,中文换行
在实际开发中,发现在table中显示中文,渲染出来的pdf,中文内容不自动换行.经过搜索发现了一种解决方案,如下: 重写Breaker,修改right计算方式 /* * Breaker.java * ...
- Java8 Lumbda表达式 初步
Java8 Lumbda表达式 初步 package com.stono.test; import java.util.function.BinaryOperator; public class Te ...
- HTTP协议系列(3)---包括WebSocket简单介绍
一.HTTPS HTTP是超文本传输协议,那HTTPS是什么尼?要明白HTTPS是什么先要明白HTTP的缺点,想一下我们在使用HTTP的时候会有那些缺点尼? 1.通信使用的明文(不加密),内容 ...
- 工厂模式在JS中的实践
.mytitle { background: #2B6695; color: white; font-family: "微软雅黑", "宋体", "黑 ...
- easyui datagrid的json格式
easyui datagrid的json格式: {"columns":[[{"field":"one","title": ...
- 《JAVASCRIPT高级程序设计》第二章
把javascript应用在网页中,需要涉及web的核心语言-html:如何让javascript既能与html共存,又不影响页面的显示效果,经过长时间的讨论.试错,最终的决定是为web增加统一的脚本 ...
- JQuery之 serialize() 及serializeArray() 实例介绍
这两个方法都是jq封装的,主要用于form表单. serialize(); 1.创建一个标准url编码显示的文本字符转: 2.操作的对象是表单元素结合的jq对象: serializeArray(); ...
- 构建自动化前端样式回归测试——BackstopJS篇
在使用scss和less开发的时候,遇到过一件很有趣的事,因为网站需要支持响应式,就开了一个响应式样式框架,简单的几百行scss代码,居然生成了近100KB的css代码,因此决定重构这个样式库.而重构 ...