日期:2014-05-20 浏览次数:20848 次
public class ProducerConsumer { public static void main(String[] args) { [color=#FF0000]SyncStack ss = new SyncStack(); Producer p = new Producer(ss); Consumer c = new Consumer(ss); new Thread(p).start(); new Thread(c).start();[/color] } } class WoTou { int id; WoTou(int id) { this.id = id; } public String toString() { return "WoTou : " + id; } } class SyncStack { int index = 0; WoTou[] arrWT = new WoTou[6]; public synchronized void push(WoTou wt) { //生产方法 [color=#FFFF00]while(index == arrWT.length) { try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } }[/color] this.notifyAll(); arrWT[index] = wt; index ++; } public synchronized WoTou pop() { while(index == 0) { try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } this.notifyAll(); index--; return arrWT[index]; } } class Producer implements Runnable { SyncStack ss = null; Producer(SyncStack ss) { this.ss = ss; } public void run() { for(int i=0; i<20; i++) { WoTou wt = new WoTou(i); ss.push(wt); System.out.println("生产了:" + wt); try { [color=#0000FF]Thread.sleep((int)(Math.random() * 200));[/color] } catch (InterruptedException e) { e.printStackTrace(); } } } } class Consumer implements Runnable { SyncStack ss = null; Consumer(SyncStack ss) { this.ss = ss; } public void run() { for(int i=0; i<20; i++) { WoTou wt = ss.pop(); System.out.println("消费了: " + wt); try { [color=#0000FF]Thread.sleep((int)(Math.random() * 1000));[/color] } catch (InterruptedException e) { e.printStackTrace(); } } } }