我有一个典型的生产者消费者问题,唯一的区别是消费者不必在生产者生产的每个单位上工作。生产者使用固定数量的数据完成,然后消费者应该接受它。此外,生产者应该等到消费者阅读批次。
我正在使用TransferQueue,但现在我希望在固定时间之后我应该读取数据,即使尺寸很小。
通常我需要队列的双向通知,如何实现?
答案 0 :(得分:0)
处理类似的问题,我需要确定生产者的数据结束以提交批次并接下来开始。我使用instanceof来确定对象的结束。
基本上,创建了EndOfData类并将此对象作为最后一个条目发送到队列中。消费者检查收到的对象是否是instanceOf数据类或EndOfData。
如果检查会引入额外的,但对我来说效果很好。希望有所帮助。
答案 1 :(得分:0)
我建议使用两个主题。
我们的想法是,制作人会将新数据放入Queue
,直到所需的条目数量为止。然后它等待(wait()
)通知(notify()
)。
另一方面,消费者也将等待直到正确的数据量在队列中或者直到达到定义的超时(wait(int timeToWait)
)。然后它将处理数据并通知生产者继续工作。