生产者消费者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]