线程间使用管道进行输入输出,分别是PiperWriter和PiperReader,管道相当于是一个阻塞队列,调用read的时候,如果没有数据就自动阻塞。而且他和普通的I/o流比,它是可中断的。
class Sender extends Thread {
private PipedOutputStream out = new PipedOutputStream();
public PipedOutputStream getPipedOutputStream(){
return out;
}
public void run(){
String strSendInfo = "KindAzrael!";
try {
out.write(strSendInfo.getBytes());
out.write(strSendInfo.getBytes());
} catch (IOException e) {
System.out.println("No Receiver!");
e.printStackTrace();
}
}
}
class Receiver extends Thread {
private PipedInputStream in = new PipedInputStream();
public PipedInputStream getPipedInputStream(){
return in;
}
public void run(){
byte [] buf = new byte[11];
int len;
try {
len = in.read(buf);
System.out.println(new String(buf, 0, len));
len = in.read(buf);
System.out.println(new String(buf, 0, len));
//System.out.println("Here");
} catch (IOException e) {
System.out.println("No Sender!");
e.printStackTrace();
}
}
}
public void testPipeStream(){
Sender tSender = new Sender();
Receiver tReceiver = new Receiver();
PipedOutputStream out = tSender.getPipedOutputStream();
PipedInputStream in = tReceiver.getPipedInputStream();
try {
in.connect(out);
} catch (IOException e) {
System.out.println("Cann't Connect!");
e.printStackTrace();
}
tReceiver.start();
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
tSender.start();
}