博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java进程通讯
阅读量:4674 次
发布时间:2019-06-09

本文共 2784 字,大约阅读时间需要 9 分钟。

  1. 管道(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.class
    try{	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());}
  2. (非进程,而是线程)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();		}	}}

转载于:https://www.cnblogs.com/zhaiqianfeng/p/4622635.html

你可能感兴趣的文章
salesforce 零基础开发入门学习(十四)salesforce中工厂模式的运用
查看>>
Deep Residual Network
查看>>
python模块之logging
查看>>
Sharepoint CAML 增删改查 List
查看>>
用Maven创建第一个web项目Struts2项目
查看>>
Python自动化测试 (九)urllib2 发送HTTP Request
查看>>
[SecureCRT] 解决 securecrt failed to open the host key database file 的问题
查看>>
搭建vue-cli脚手架
查看>>
JS兼容性问题
查看>>
Java实现Oracle导出数据到Excel
查看>>
Python相关网站(持续更新)
查看>>
EventLog实现事件日志操作
查看>>
VS2010上连接SQLite数据库
查看>>
Oracle数据库安装图文操作步骤
查看>>
贪心算法的简单理解
查看>>
Linux性能检测常用的10个基本命令
查看>>
Mac上传代码到Github
查看>>
day80 django模版学习
查看>>
Java实现注册邮箱激活验证
查看>>
Windows Phone 7 Belling‘s课堂(一) 磁贴的学习
查看>>