PipedInputStream and PipedOutputStream example

必须要有PipedInputStream ,PipedOutputStream 在不同线程,不然死锁

Java.io.PipedOutputStream and java.io.PipedInputStream has been introduced in JDK 1.0. PipedOutputStream and PipedInputStream both are connected to each other to create a communication pipe. PipedOutputStream is the sending end and PipedOutputStream is the receiving end of the pipe. Both ends should not be handled by single thread otherwise deadlock may occur. If any thread stops working, pipe is said to be broken.

Java PipedOutputStream and PipedInputStream Example

 

 

public class PipedStreamExample
{
final static PipedOutputStream pipedOut = new PipedOutputStream();
final static PipedInputStream pipedIn = new PipedInputStream();

class PipedOutputThread implements Runnable{
@Override
public void run() {
for(int i=1;i<=10;i++){
try {
pipedOut.write(("Message "+i+"\n").getBytes());
Thread.sleep(500);
} catch (IOException e) {
e.printStackTrace();
}catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}

class PipedInputThread implements Runnable{
@Override
public void run() {
try {
int i=0;
while((i=pipedIn.read())!=-1){
System.out.print((char)i);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

public static void main(String[] args) {
try {
pipedOut.connect(pipedIn);
} catch (IOException e) {
e.printStackTrace();
}
ExecutorService service = Executors.newFixedThreadPool(2);
service.execute(new PipedStreamExample().new PipedOutputThread());
service.execute(new PipedStreamExample().new PipedInputThread());
}}

posted on 2018-03-28 16:55  卖肾割阑尾  阅读(92)  评论(0编辑  收藏  举报

导航