public class ProducerConsumer<br />{<br />public static void main( String[] args )<br />{<br />SyncStack sync = new SyncStack() ;<br />Producer pro = new Producer( sync ) ;<br />Consumer con = new Consumer( sync ) ;</p><p>for( int i = 0 ; i < 1 ; i ++ )<br />{<br />new Thread( pro , String.valueOf( i ) ).start() ;<br />new Thread( con , String.valueOf( i )).start() ;<br />}<br />}<br />}</p><p>/**<br /> * 窩頭堆棧<br /> * */<br />class SyncStack<br />{<br />private Woto[] wos = new Woto[600] ;<br />private int index ;</p><p>public synchronized void push( Woto woto )<br />{<br />while( wos.length == index )<br />{<br />try<br />{<br />this.wait() ;<br />}<br />catch ( InterruptedException e )<br />{<br />e.printStackTrace();<br />}<br />}</p><p>this.notify() ;</p><p>wos[ index ] = woto ;<br />++ index ;<br />System.out.println( Thread.currentThread().getName() + "_____________生產了饅頭->>" + woto ) ;<br />}</p><p>public synchronized Woto pop()<br />{<br />while( 0 == index )<br />{<br />try<br />{<br />this.wait() ;<br />}<br />catch ( InterruptedException e )<br />{<br />e.printStackTrace();<br />}<br />}</p><p>this.notify() ;<br />-- index ;<br />System.out.println( Thread.currentThread().getName() + "%%%消費了饅頭->>" + wos[index] ) ;<br />return wos[ index ] ;</p><p>}<br />}</p><p>/**<br /> * 窩頭類<br /> * */<br />class Woto<br />{<br />private String name ;</p><p>public Woto( String name )<br />{<br />this.name = name ;<br />}</p><p>public String toString()<br />{<br />return "[窩頭:" + this.name + "]" ;<br />}<br />}</p><p>/**<br /> * 生產者<br /> * */<br />class Producer implements Runnable<br />{<br />private SyncStack wotos ;</p><p>public Producer( SyncStack wotos )<br />{<br />this.wotos = wotos ;<br />}</p><p>public void run()<br />{<br />for( int i = 0 ; i < 2000 ; i ++ )<br />{<br />Woto woto = new Woto( String.valueOf( i ) ) ;<br />this.wotos.push( woto ) ;</p><p>//try<br />//{<br />//Thread.sleep( (int)(Math.random() * 2) ) ;<br />//}<br />//catch ( InterruptedException e )<br />//{<br />//e.printStackTrace();<br />//}<br />}<br />}<br />}</p><p>/**<br /> * 消費者<br /> * */<br />class Consumer implements Runnable<br />{<br />private SyncStack wotos ;</p><p>public Consumer( SyncStack wotos )<br />{<br />this.wotos = wotos ;<br />}</p><p>public void run()<br />{<br />for( int i = 0 ; i < 2000 ; i ++ )<br />{<br />this.wotos.pop() ;</p><p>try<br />{<br />Thread.sleep( (int)(Math.random() * 2 ) ) ;<br />}<br />catch ( InterruptedException e )<br />{<br />e.printStackTrace();<br />}<br />}<br />}<br />}<br />