Man 线程对 Woman 线程 说 I Love You,然后Woman 线程接收并打印出来
import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
/**
* 管道输出流,用于输出数据
* @author L.Eric
*/
class Man implements Runnable{
private PipedOutputStream pos = new PipedOutputStream();
public PipedOutputStream getOutputSteam(){
return pos;
}
@Override
public void run() {
String data = "I love you";
try {
pos.write(data.getBytes());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if(pos != null) {
try {
pos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
/**
* 管道输入流,用于接收输入的数据
* @author L.Eric
*
*/
class Woman implements Runnable{
private PipedInputStream pis = new PipedInputStream();
public PipedInputStream getIntputStream(){
return pis;
}
@Override
public void run() {
int len = 0;
byte[] buff = new byte[1024];
try {
while((len = pis.read(buff, 0, buff.length)) != -1) {
System.out.println(new String(buff, 0, len));
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if(pis != null) {
try {
pis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
/**
* 管道流用于两个线程之间的通信,交换数据
* Man 线程对 Woman 线程 说 I Love You,然后Woman 线程接收并打印出来
* @author L.Eric
*
*/
public class PipedStreamDemo {
public static void main(String[] args) throws IOException {
Man man = new Man();
Woman woman = new Woman();
/**
* 建立管道
* */
woman.getIntputStream().connect(man.getOutputSteam());
//启动两个个线程
new Thread(man).start();
new Thread(woman).start();
}
}