实现思路:
在发送的线程中定义管道输出流,在接收线程中定义管道输入流,在操作中使用 connect()方法 将两个线程管道连接在一起,线程启动后会自动进行管道的输入、输出操作。
package zz.pipeddemo;
import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
// 利用管道流实现两个线程之间的通信
class Send implements Runnable{ // 实现Runnable接口
private PipedOutputStream pos = null; // 定义管道输出流
public Send(){
this.pos = new PipedOutputStream(); // 在构造器中实例化管道输出流!
}
public void run(){
String message = "Hello Zhang Ze!!!";
try{
this.pos.write(message.getBytes()); // 输出信息
}catch (IOException e){
e.printStackTrace();
}
try{
this.pos.close(); // 关闭输出流
}catch (IOException e){
e.printStackTrace();
}
}
public PipedOutputStream getPos(){ // 通过线程类得到输出流
return pos;
}
}
class Receive implements Runnable{
private PipedInputStream pis = null;
public Receive(){
this.pis = new PipedInputStream();
}
public void run(){
byte bt[] = new byte[1024];
int len = 0;
try{
len = this.pis.read(bt);
}catch (IOException e){
e.printStackTrace();
}
try{
this.pis.close();
}catch (IOException e){
e.printStackTrace();
}
System.out.println("接收的内容为:" + new String(bt, 0, len));
}
public PipedInputStream getPis(){
return pis;
}
}
public class PipedDemo{
public static void main(String []args){
Send send = new Send();
Receive receive = new Receive();
try{
send.getPos().connect(receive.getPis()); // 连接管道流
}
catch (Exception e){
e.printStackTrace();
}
new Thread(send).start(); // 启动线程
new Thread(receive).start();
}
}
程序运行结果:
接收的内容为:Hello Zhang Ze!!!