父子进程的通信(非线程模拟 java)
2010-10-28 20:01
357 查看
说明:1.运行结果:farther receive:child receive:I am your fartherI am your son
2.数据通过readline()方法读出时已经去掉了"/n"符号,所以结果不会换行
3.通过获得子进程的输入输出流,当父进程将数据写到管道后,必须在此管道关闭后,子进程才能操作。子进程发送数据也是一样的
4.进程间通信是异步的,从运行结果也可以看出。
5.在父进程中创建一个用户进程或者本地进程,用:Runtime.getRuntime().exec("java -cp d:/java/child.jar; com.xie.netcourse3.Child");
//Child.java
package com.xie.netcourse3;
import java.io.*;
public class Child {
public static void main(String[] args) throws IOException{
//准备接收父程序消息
BufferedReader s = new BufferedReader(new InputStreamReader(System.in));
String line = null;
StringBuffer all = new StringBuffer();
//接收父程序消息
while((line = s.readLine()) != null){
all.append(line);
}
System.out.println("child receive:"+all.toString()+"/n");
s.close();
//当父程序关闭输入流时,执行操作
String ret = "I am your son";
//返回消息给父程序
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
bw.write(ret) ;
bw.flush();
bw.close();
}
}
//Farther.java
package com.xie.netcourse3;
import java.io.*;
public class Farther {
public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException{
//执行程序
Process process = Runtime.getRuntime().exec("java -cp d:/java/child.jar; com.xie.netcourse3.Child");
//发送消息
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
bw.write("I am your farther");
bw.flush();
//必须关闭才能收到信息
bw.close();
//读取程序返回消息
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = null;
StringBuffer all = new StringBuffer();
while((line = br.readLine()) != null){
all.append(line);
}
br.close();
//显示返回消息
System.out.println("farther receive:"+all.toString());
}
}
2.数据通过readline()方法读出时已经去掉了"/n"符号,所以结果不会换行
3.通过获得子进程的输入输出流,当父进程将数据写到管道后,必须在此管道关闭后,子进程才能操作。子进程发送数据也是一样的
4.进程间通信是异步的,从运行结果也可以看出。
5.在父进程中创建一个用户进程或者本地进程,用:Runtime.getRuntime().exec("java -cp d:/java/child.jar; com.xie.netcourse3.Child");
//Child.java
package com.xie.netcourse3;
import java.io.*;
public class Child {
public static void main(String[] args) throws IOException{
//准备接收父程序消息
BufferedReader s = new BufferedReader(new InputStreamReader(System.in));
String line = null;
StringBuffer all = new StringBuffer();
//接收父程序消息
while((line = s.readLine()) != null){
all.append(line);
}
System.out.println("child receive:"+all.toString()+"/n");
s.close();
//当父程序关闭输入流时,执行操作
String ret = "I am your son";
//返回消息给父程序
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
bw.write(ret) ;
bw.flush();
bw.close();
}
}
//Farther.java
package com.xie.netcourse3;
import java.io.*;
public class Farther {
public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException{
//执行程序
Process process = Runtime.getRuntime().exec("java -cp d:/java/child.jar; com.xie.netcourse3.Child");
//发送消息
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
bw.write("I am your farther");
bw.flush();
//必须关闭才能收到信息
bw.close();
//读取程序返回消息
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = null;
StringBuffer all = new StringBuffer();
while((line = br.readLine()) != null){
all.append(line);
}
br.close();
//显示返回消息
System.out.println("farther receive:"+all.toString());
}
}
相关文章推荐
- Java基础15:进程间和线程间的通信方式
- Java进程与父子进程的标准输出流关联导致线程卡死的故障
- Java【多线程知识总结(10)】线程通信之wait()与notify()的运用--模拟指挥官指挥2个连队交替轰炸战区<另外的写法>
- JAVA线程与线程通信,进程与进程通信
- Java【多线程知识总结(10)】线程通信之wait()与notify()的运用--模拟指挥官指挥2个连队交替轰炸战区
- JAVA学习笔记(1)_____模拟线程通信之生产者消费者问题
- Java【多线程知识总结(10)】线程通信之wait()与notify()的运用--模拟指挥官指挥2个连队交替轰炸战区
- 学习java多线程的笔记3-使用BlockingQueue阻塞队列来模拟两个线程之间的通信
- JAVA线程与进程间的通信
- java进程、线程通信方法以及进程与线程的区别
- Java 父子进程通信
- java父子进程通信
- java挑战高并发 之(10):使用wait/notify/notifyAll实现线程间通信的几点重要说明
- java进程和线程
- java多进程 -CD7-孙鑫-(1)-程序/进程/线程/设置后台线程/将当前线程暂停
- Linux的进程/线程间通信方式总结 04
- nginx 父子进程通信 channel
- 【Java并发编程】之十二:线程间通信中notifyAll造成的早期通知问题(含代码)(r)
- java的线程与进程
- 【Java多线程】线程间的通信