import java.io.*; class PipedThreads { public static void main(String[] args){ try{ PipedWriter pw = new PipedWriter(); PipedReader pr = new PipedReader( pw ); Consumer c1 = new Consumer("C1", pr ); Producer p1 = new Producer("P1", pw ); new Thread(c1).start(); new Thread(p1).start(); }catch(IOException e){ System.out.println(e); } } } class Producer implements Runnable{ PrintWriter pw; String producerName; Producer(String name, Writer pipe){ producerName = name; pw = new PrintWriter( pipe ); } public void run(){ for(int i=0; i<50;i++){ try{Thread.sleep( (int)(Math.random()*50) );} catch(InterruptedException e){}; pw.println(producerName + " produced a " + i); } pw.println("STOP"); } } class Consumer implements Runnable{ BufferedReader br; String consumerName; Consumer(String name, Reader pr){ consumerName = name; br = new BufferedReader( pr ); } public void run(){ try{ String line= br.readLine(); while ( !line.equals("STOP") ){ System.out.println(consumerName + " got: " + line); line = br.readLine(); } System.out.println("Consumer " + consumerName + " stopped"); }catch(IOException e){} } }