java.lang.IllegalMonitorStateException
我的问题是 没有将 notifyAll放到synchronized代码块中
一开始代码 代码会抛出异常java.lang.IllegalMonitorStateException
synchronized (tasks) {
while (tasks.size() >= maxTaskCount) {
System.out.println("tasks队列 大于设置线下数 生产者线程满了,等待消费者消费....."+Thread.currentThread().getName());
tasks.wait();
}
}
//将T放添加入队列中
tasks.add(task);
//唤醒等待的线程
tasks.notifyAll();
解决:只需要将tasks.notifyAll(); 放到synchronized代码块中执行
synchronized (tasks) {
while (tasks.size() >= maxTaskCount) {
System.out.println("tasks队列 大于设置线下数 生产者线程满了,等待消费者消费....."+Thread.currentThread().getName());
tasks.wait();
}
//将T放添加入队列中
tasks.add(task);
//唤醒等待的线程 ,如果synchronized代码块中的
tasks.notifyAll();
}
文章讲述了在实现生产者消费者模型时遇到的java.lang.IllegalMonitorStateException异常,原因是没有在同步块中调用notifyAll()方法。解决方案是确保notifyAll()操作在synchronized代码块内部,以正确地释放锁并唤醒等待的线程。
4818

被折叠的 条评论
为什么被折叠?



