Java 生产者-消费者问题中饥饿是如何发生的

Java 生产者-消费者问题中饥饿是如何发生的,java,multithreading,producer-consumer,Java,Multithreading,Producer Consumer,请给出一个发生饥饿的生产者-消费者场景示例。如果编码正确,生产者-消费者问题始终不会饥饿 消费者阻塞,直到有准备好的缓冲区消费。 生产者阻塞,直到有空的缓冲区产生。 生产者在生产后立即将缓冲区移动到就绪缓冲队列。 消费者在消费后立即将缓冲区移动到空缓冲区队列。 这种安排不会导致饥饿 但是如果你引入了一个bug,比如: 在特定条件下,使用者不会将先前使用的缓冲区返回到空缓冲区队列,并继续等待下一个准备好的缓冲区被使用 或者,在特定条件下,生产者并没有将生成的缓冲区返回到就绪缓冲区队列,而是继续等待

请给出一个发生饥饿的生产者-消费者场景示例。

如果编码正确,生产者-消费者问题始终不会饥饿

消费者阻塞,直到有准备好的缓冲区消费。 生产者阻塞,直到有空的缓冲区产生。 生产者在生产后立即将缓冲区移动到就绪缓冲队列。 消费者在消费后立即将缓冲区移动到空缓冲区队列。 这种安排不会导致饥饿

但是如果你引入了一个bug,比如:

在特定条件下,使用者不会将先前使用的缓冲区返回到空缓冲区队列,并继续等待下一个准备好的缓冲区被使用

或者,在特定条件下,生产者并没有将生成的缓冲区返回到就绪缓冲区队列,而是继续等待生成空缓冲区

那么这种情况最终会导致饥饿


保持缓冲区时的这种等待情况可能导致饥饿。

关于堆栈溢出,我们可以用一个例子来说明答案。但一个例子并不是答案的唯一目的。为什么不从网上拿例子呢?如果你不了解一些现有的例子,你可以问它具体。我没有从谷歌找到任何例子,这就是为什么我在这里张贴。