liumin1939 发表于 2013-2-5 01:21:42

生产者消费者JAVA队列实现

class SyncQueue...{    private int head=0;//队头    private int tail=1;//队尾    public final int Num=6;//缓冲区大小    public char data[]=new char;    publicsynchronized void inqueue(char c)...{      while((tail+1)%Num==head)...{            try...{                this.wait();            }catch(InterruptedException e)...{System.out.println(e);}                  }      this.notify();                  data=c;            tail=(tail+1)%Num;            System.out.println("produced:" + c );                  }    publicsynchronized char outqueue()...{      while((head+1)%Num==tail)...{            try...{                this.wait();            }catch(InterruptedException e)...{System.out.println(e);}      }            this.notify();                        head=(head+1)%Num;                        System.out.println("消费:"+data);            return data;                }}

class Producer implements Runnable...{    SyncQueue queue;    public Producer(SyncQueue s)...{      queue=s;    }    public void run()...{      for(int i=0;i<20;i++)...{            char c=(char)(Math.random()*26+'A');            queue.inqueue(c);            try...{                Thread.sleep((int)(Math.random()*20));            }catch(InterruptedException e)...{System.out.println(e);}      }    }}


class Customer implements Runnable...{    SyncQueue queue;    public Customer(SyncQueue s)...{      queue=s;    }    public void run()...{      for(int i=0;i<20;i++)...{            char c=queue.outqueue();            try...{                Thread.sleep((int)(Math.random()*20));            }catch(InterruptedException e)...{System.out.println(e);}      }    }}


public class SyncTest...{    public static void main (String[] args) ...{      SyncQueue queue=new SyncQueue();      Runnable p=new Producer(queue);      Runnable c=new Customer(queue);      Thread t1=new Thread(p);      Thread t2=new Thread(c);      t1.start();      t2.start();            }}

注:注意wait()和notify()的位置,否则将引者死锁的发生。
页: [1]
查看完整版本: 生产者消费者JAVA队列实现