谢谢
这些概念我知道,但不知在JAVA中如何实现。
请问有没有程序片段?

解决方案 »

  1.   

    我只对管道通信蛮清楚的说
    core in java里面有个很不错的管道通信例子
    程序如下
    import java.util.*;
    import java.io.*;public class PipeTest
    {  public static void main(String args[])
       {  try
          {  /* set up pipes */
             PipedOutputStream pout1 = new PipedOutputStream();
             PipedInputStream pin1 = new PipedInputStream(pout1);         PipedOutputStream pout2 = new PipedOutputStream();
             PipedInputStream pin2 = new PipedInputStream(pout2);         /* construct threads */         Producer prod = new Producer(pout1);
             Filter filt = new Filter(pin1, pout2);
             Consumer cons = new Consumer(pin2);         /* start threads */         prod.start();
             filt.start();
             cons.start();
          }
          catch (IOException e){}
       }
    }class Producer extends Thread
    {  public Producer(OutputStream os)
       {  out = new DataOutputStream(os);
       }   public void run()
       {  while (true)
          {  try
             {  double num = rand.nextDouble();
                out.writeDouble(num);
                out.flush();
                sleep(Math.abs(rand.nextInt() % 1000));
             }
             catch(Exception e)
             {  System.out.println("Error: " + e);
             }
          }
       }   private DataOutputStream out;
       private Random rand = new Random();
    }class Filter extends Thread
    {  public Filter(InputStream is, OutputStream os)
       {  in = new DataInputStream(is);
          out = new DataOutputStream(os);
       }   public void run()
       {  for (;;)
          {  try
             {  double x = in.readDouble();
                total += x;
                count++;
                if (count != 0) out.writeDouble(total / count);
             }
             catch(IOException e)
             {  System.out.println("Error: " + e);
             }
          }
       }   private DataInputStream in;
       private DataOutputStream out;
       private double total = 0;
       private int count = 0;
    }class Consumer extends Thread
    {  public Consumer(InputStream is)
       {   in = new DataInputStream(is);
       }   public void run()
       {  for(;;)
          {  try
             {  double avg = in.readDouble();
                if (Math.abs(avg - old_avg) > 0.01)
                {  System.out.println("Current average is " + avg);
                   old_avg = avg;
                }
             }
             catch(IOException e)
             {  System.out.println("Error: " + e);
             }
          }
       }   private double old_avg = 0;
       private DataInputStream in;
    }
      

  2.   

    随便把自己的作业拷过来了,管道实现IO读写同步。
    import java.io.*;
    import java.math.*;public class  WRPipe
    {

    public static void main(String [] args)
    {
    WRPipe wrpipe=new WRPipe();
    try{
     PipedOutputStream pwr=new PipedOutputStream();
     PipedInputStream prd=new PipedInputStream(pwr);
     
     System.out.println("Pipe connected......");
     Object o = new Object();
     WriteThread wrThread=new WriteThread(pwr, o);
     ReadThread rdThread=new ReadThread(prd, o);
     wrThread.start();
     rdThread.start();
     
    }catch(Exception e){}
    }
    }class WriteThread extends Thread
    {
    PrintStream get;
    Object O;
    public WriteThread(OutputStream ops, Object o)
    {
    O = o;
    this.get=new PrintStream(ops,true);
    System.out.println("write thread started......");
    }
    public void run()
    {
    char m=0;
    boolean stop = false;
    while(!stop) {
    m=(char)(Math.random()*128+1);
    if(m=='.') stop = true;
    if(Character.isLetter(m)||stop||Character.isDigit(m)) {
    System.out.println("writing "+m);

    if(stop) System.out.println("meet . ,write terminating");
    get.print(m);
    }
    }

    }
    }
    class ReadThread extends Thread
    {
    DataInputStream set;
    Object O;
    public ReadThread(InputStream ips, Object o)
    {
    O = o;
    set=new DataInputStream(ips);
    System.out.println("read thread started......");
    }
    public void run() 
    {
    try{
    char c = 0;
    while((c=(char)set.read()) != '.')
    {
    System.out.println("reading "+c); 
    }
    System.out.println("meet . ,read terminating");
    // synchronized (O) {
    // O.notifyAll();
    // }

    }catch(Exception e) {
    e.printStackTrace();}
    }
    }