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();
}