执行下面这一段代码, 会出现idea死锁的情况, 但是我不知道为什么,求解
// 仓库里面食物只能存放一个. cnt = 0的时候生产, cnt = 1的时候消费 public class Container { private volatile int cnt = 0; public synchronized void push(){ if(cnt == 1){ try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } else{// 如果去掉else{}只留下{}里面的内容执行就会成功。不产生死锁 cnt++; System.out.println(Thread.currentThread().getName()+"生产了"+cnt); notifyAll(); } } public synchronized void pop(){ if (cnt == 0){ try { wait(); System.out.println("pop 里面 cnt = "+ cnt); } catch (InterruptedException e) { e.printStackTrace(); } } else {// 如果去掉else{}只留下{}里面的内容执行就会成功。不产生死锁 cnt--; System.out.println(Thread.currentThread().getName()+"消费了"+cnt); notifyAll(); } } } // 主函数 public class DemoTest { public static void main(String[] args) { Container container = new Container(); new Thread(()->{ for (int i = 0; i < 10; i++) { container.push(); } }, "生产者1号 ").start(); new Thread(()->{ for (int i = 0; i < 10; i++) { container.pop(); } }, "消费者1号 ").start(); } }
全部评论
(1) 回帖