请教大家关于线程死锁问题 wait notifyAll - Java / Java SE
public class ProducerConsumer{ public static void main(String[] args){ SyncStack ss = new SyncStack(); Producer p = new Producer(ss); Producer pp = new Producer(ss); Consumer c = new Consumer(ss); new Thread(pp).start(); 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 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){ System.out.println(e); } } this.notifyAll(); arrwt[index]=wt; index++; } public synchronized WoTou pop(){ while(index==0){ try{ this.wait(); }catch(InterruptedException e){ System.out.println(e); } } 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<10;i++){ WoTou wt = new WoTou(i); ss.push(wt); System.out.println("生产:"+wt); try { Thread.sleep((int)(Math.random() * 200)); } 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<10;i++){ WoTou wt=ss.pop(); System.out.println("消费:"+wt); try { Thread.sleep((int)(Math.random() * 200)); } catch (InterruptedException e) { e.printStackTrace(); } } }}