java線程類比生產者與消費者

來源:互聯網
上載者:User

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 />

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.