制片人终止消费者

时间:2013-03-21 16:49:27

标签: java concurrency producer-consumer

我目前正在研究并发编程模式。考虑使用信号量的有界缓冲区生成器消费者问题的解决方案,在wikipedia上提供。

如果在某个时候制片人说:这是我正在制作的最后一项。我怎么能让程序终止?(消费者仍然会等到它被告知缓冲区中有东西)。

同样,如果消费者说:我不想再消费了。如何通知制作人,以便程序退出? (制作人正在等待有一个可用的地点放一些东西)。

2 个答案:

答案 0 :(得分:4)

来自Java Concurrency in Practice Book 7.2.3

Another way to convince a producer consumer service to shut down is with a poison pill: a recognizable object placed on the queue that means "when you get this, stop."

完成本书的第7章Cancellation and Shutdown

答案 1 :(得分:2)

您可以让生产者通过在队列中放置有害消息来终止消费者,当消费者收到消息时,它会识别消息是生产者关闭的消息,并相应地自行关闭。

在给定方案中,消费者与生产者之间的沟通是不可能的,您将不得不创建另一个沟通渠道,因为沟通目前只有一种方式。

您可以使用Exchanger实例进行直接(无队列)通信,然后可以双向传递有害消息,但您现在拥有直接链接的进程对而不是独立的生产者/消费者对。

最后,您可以向一个经理注册所有生产者和消费者,他们都有一个参考,任何生产者/消费者都可以请求关闭,设置一个标志,然后全部检查标志,或者回复InterruptedException和管理器向每个中断发送一个中断。