求解java多线程生产者消费者问题
执行下面这一段代码, 会出现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();
}
} #Java开发##java工程师##学习路径#