FWQ
生产者消费者问题:为什么多个消费者只有一个参与消费?
生产者消费者问题:多个消费者中只有一个参与消费 在生产者消费者模式中,尽管存在多个消费者线程,但程序中仅有一个消费者参与消费,违背了预期。 问题原因 此问题根源在于 wt() 和 notifyall() 方法的机制。只有持才能调用 wait() 方法,而 notifyall() 只能唤醒由该锁调用 wait() 方法而处于等待状态的线程。 程序执行流程 生产者线程获取锁,生产资源并唤醒所有等待线程。 多个消费者线程竞争锁,假设消费者 1 首先获取锁。 消费者 1 消费资源并唤醒所有等待线程,但尚未释放锁。 生产者线程被唤醒,但由于判断资源数量大于 0,再次进入等待状态。 消费者 1 持续持有锁,没有机会让其他消费者参与消费。 解决方案…