生产者跟消费者(馒头)
public class ProduserandConsucer { public static void main(String[] args) { Stack sk = new Stack(); Producer p = new Producer(sk); Cunsumer c = new Cunsumer(sk); new Thread(p).start(); new Thread(c).start(); }}class WoTou{ int id; WoTou(int id){ this.id = id; } public String toString(){ return "WoTou="+id; }}class Stack{ int index = 0; WoTou[] arrWT = new WoTou; public synchronized void Push(WoTou wt){ while(index ==arrWT.length){ try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } this.notify(); arrWT = wt; index ++; } public synchronized WoTou tack(){ while(index==0){ try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } this.notify(); index --; return arrWT; }}class Producer implements Runnable{ Stack sk = null; Producer(Stack sk){ this.sk = sk; } @Override public void run() { for (int i = 0; i < 20; i++) { WoTou wt = new WoTou(i); sk.Push(wt); System.out.println("生产了="+wt); try { Thread.sleep((int)(Math.random()*2)); } catch (InterruptedException e) { e.printStackTrace(); } } } }class Cunsumer implements Runnable{ Stack sk = null; public Cunsumer(Stack sk){ this.sk = sk; } @Override public void run() { for (int i = 0; i < 20; i++) { WoTou wt = sk.tack(); System.out.println("消费了="+wt); try { Thread.sleep((int)(Math.random()*1000)); } catch (InterruptedException e) { e.printStackTrace(); } } } }
页:
[1]