package cn.tt; public class ProducerConsumer { public static void main(String[] args) throws InterruptedException { SyncStack ss = new SyncStack(); Producer p = new Producer(ss); consumer c = new consumer(ss); new Thread(p).start(); Thread.sleep(2000); new Thread(c).start(); } } class WoTou { int id; WoTou(int id) { this.id = id; } @Override public String toString() { return "WoTou [id=" + id + "]"; } } class SyncStack { int index = 0; WoTou[] arrWT = new WoTou[6]; public synchronized void push(WoTou wt) { while (index == arrWT.length) { try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } this.notify(); arrWT[index] = wt; index++; } public synchronized WoTou pop() { while (index == 0) { try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } this.notify(); index--; return arrWT[index]; } } class Producer implements Runnable { SyncStack ss = null; public Producer(SyncStack ss) { this.ss = ss; } @Override public void run() { for (int i = 0; i < 20; i++) { WoTou wt = new WoTou(i); ss.push(wt); System.out.println("Producer.run()"+wt); try { Thread.sleep((long) (Math.random()*1000)); } catch (InterruptedException e) { e.printStackTrace(); } } } } class consumer implements Runnable { SyncStack ss = null; public consumer(SyncStack ss) { this.ss = ss; } @Override public void run() { for (int i = 0; i < 20; i++) { WoTou wt = ss.pop(); System.out.println("consumer.run()>>>>>>>>>>>>"+wt); try { Thread.sleep((long) (Math.random()*1000)); } catch (InterruptedException e) { e.printStackTrace(); } } } }
原文地址:https://www.cnblogs.com/wangzijoe/p/9109368.html
时间: 2024-10-08 10:59:23