Java tutorial
import java.io.IOException; import java.io.PipedInputStream; import java.io.PipedOutputStream; public class Main { public static void main(String args[]) { Thread thread1 = new Thread(new PipeOutput("Producer")); Thread thread2 = new Thread(new PipeInput("Consumer")); thread1.start(); thread2.start(); boolean thread1IsAlive = true; boolean thread2IsAlive = true; do { if (thread1IsAlive && !thread1.isAlive()) { thread1IsAlive = false; } if (thread2IsAlive && !thread2.isAlive()) { thread2IsAlive = false; } } while (thread1IsAlive || thread2IsAlive); } } class PipeIO { PipedOutputStream outputPipe = new PipedOutputStream(); PipedInputStream inputPipe = new PipedInputStream(); String name; public PipeIO(String id) { name = id; try { outputPipe.connect(inputPipe); } catch (IOException ex) { System.out.println("IOException in static initializer"); } } } class PipeOutput extends PipeIO implements Runnable { public PipeOutput(String id) { super(id); } public void run() { String s = "This is a test."; try { for (int i = 0; i < s.length(); ++i) { outputPipe.write(s.charAt(i)); System.out.println(name + " wrote " + s.charAt(i)); } outputPipe.write('!'); } catch (IOException ex) { System.out.println("IOException in PipeOutput"); } } } class PipeInput extends PipeIO implements Runnable { public PipeInput(String id) { super(id); } public void run() { boolean eof = false; try { while (!eof) { int inChar = inputPipe.read(); if (inChar != -1) { char ch = (char) inChar; if (ch == '!') { eof = true; break; } else System.out.println(name + " read " + ch); } } } catch (IOException ex) { System.out.println("IOException in PipeOutput"); } } }