Demo的实现:
1)两个线程:
线程1:建立写管道
线程2:建立读管道
2)线程1的读管道连接线程2的写管道
3)
线程1:每隔一秒钟向管道中写入数据,将跑步数量写入管道
线程2:不断的轮询管道,读出跑步数量,打印出来
package com.cn.pipe;
import java.io.*;
class Send implements Runnable
{ // 线程类
private PipedOutputStream pos = null; // 管道输出流
public Send()
{
this.pos = new PipedOutputStream(); // 实例化输出流
}
public void run()
{
int step = 1;
while (true)
{
String str = "跑步计数"; // 要输出的内容
try
{
Thread.sleep(1000);
this.pos.write((str + " " + step++).getBytes());
}
catch (IOException e)
{
e.printStackTrace();
break;
}
catch (InterruptedException e)
{
e.printStackTrace();
break;
}
}
try
{
this.pos.close();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public PipedOutputStream getPos()
{ // 得到此线程的管道输出流
return this.pos;
}
};
class Receive implements Runnable
{
private PipedInputStream pis = null; // 管道输入流
public Receive()
{
this.pis = new PipedInputStream(); // 实例化输入流
}
public void run()
{
while (true)
{
int len = 0;
byte b[] = new byte[1024]; // 接收内容
try
{
len = this.pis.read(b); // 读取内容
}
catch (IOException e)
{
e.printStackTrace();
break;
}
System.out.println(new String(b, 0, len));
}
try
{
this.pis.close(); // 关闭
}
catch (IOException e)
{
e.printStackTrace();
}
}
public PipedInputStream getPis()
{
return this.pis;
}
};
public class PipeDemo
{
public static void main(String[] args)
{
Send s = new Send();
Receive r = new Receive();
try
{
s.getPos().connect(r.getPis()); // 连接管道
}
catch (IOException e)
{
e.printStackTrace();
}
new Thread(s).start(); // 启动线程
new Thread(r).start(); // 启动线程
}
}
输出结果:
跑步计数 1
跑步计数 2
跑步计数 3
跑步计数 4
跑步计数 5
跑步计数 6
跑步计数 7
跑步计数 8
跑步计数 9
跑步计数 10
跑步计数 11
跑步计数 12
跑步计数 13
跑步计数 14