如果有两个消费者可能会异常吗

来源: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里等待

0
0

深度解密Java并发工具,精通JUC,成为并发多面手

JUC全方位讲解,构建并发工具类知识体系

1599 学习 · 573 问题

查看课程