| 
     
  
 
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"); 
    } 
  } 
} 
 
    
   
    
    |