如果有两个消费者可能会异常吗
来源:10-7 用条件对象实现生产者模式

慕先生6469682
2021-03-30
Producer producer = conditionDemo2.new Producer();
Consumer consumer = conditionDemo2.new Consumer();
Consumer consumer1 = conditionDemo2.new Consumer();
producer.start();
consumer.start();
consumer1 .start();
假设当消费者1最先获取锁,因为队列为空则会进入到while里面,并且执行条件await(), 之后便释放锁,释放之后 消费者2马上获取到锁,同样检测到队列里面为空,并且执行条件await(),便释放锁。之后生产者会获取到锁,获取到锁之后向生产者队列里面只提交了一个元素,因为调用了消费者条件的唤醒,消费者1和2都处于可执行状态,当消费者1执行完之后,队列里面已经没有了元素,如果消费者2紧接着执行queue.poll(),则会报异常。 但我执行的时候 发现消费者2没有报异常 居然重新进入了while循环,没有执行到queue.poll()这一步
写回答
1回答
-
悟空
2021-03-30
是的,你看下代码,有这个判断while (queue.size() == 0),所以第一个消费者消费后,第二个消费者会继续在while里等待
00
相似问题