public class ProduceConsumer { public static void main(String[] args) { SyncStack ss = new SyncStack(); Producer p = new Producer(ss); Consumer c = new Consumer(ss); new Thread(p).start();// new Thread(p).start();// new Thread(p).start();// new Thread(c).start();// new Thread(c).start(); new Thread(c).start(); } } class WoTou { int id; public WoTou(int id) { this.id = id; } public String toString() { return "WoTou: " + id; }} class SyncStack { int index = 0; WoTou arr[] = new WoTou[6]; public synchronized void push(WoTou wt) { while (index == arr.length) { try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } this.notifyAll(); arr[index] = wt; index++; } public synchronized WoTou pop() { while (index == 0) { try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } this.notifyAll(); index--; return arr[index]; }} class Producer implements Runnable { SyncStack ss = null; public 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 { Thread.sleep((long)(Math.random()*200)); } catch (InterruptedException e) { e.printStackTrace(); } } }} class Consumer implements Runnable { SyncStack ss = null; public Consumer(SyncStack ss) { this.ss = ss; } public void run() { for (int i = 0; i < 20; i++) { WoTou wt = ss.pop(); System.out.println("consume is "+wt); try { Thread.sleep((long)(Math.random()*1000)); } catch (InterruptedException e) { e.printStackTrace(); } } }}
thread之消费者与生产者
最新推荐文章于 2023-04-16 20:49:15 发布