Java中是否有阻塞队列只允许窥视?

时间:2014-04-18 05:01:51

标签: java multithreading blockingqueue

我需要一个大小为1的阻塞队列,每次应用put时,它会删除最后一个值并添加下一个值。消费者将是一个线程池,其中每个线程需要在消息放入队列时读取消息并决定如何处理它,但是他们不应该从队列中取出,因为它们都需要读取从中。

我正在考虑每次制作人发出新消息时只是接受和放置,但只是偷看消费者的run方法会导致他们经常偷看,不是吗?理想情况下,一旦偷看停止,消息就会消失,但我不想使用定时轮询,因为不能保证每个消费者都能及时查看消息。

我目前的另一个选择是迭代消费者集合并使用消息调用它们的公共方法,但我真的不想这样做,因为系统依赖于实时更新,而且很大如果我正在遍历堆栈上的每个方法调用,那么集合将需要一段时间才能完全迭代。

1 个答案:

答案 0 :(得分:1)

经过一番考虑,我认为你最好,每个消费者都有自己的队列,生产者把消息放在所有队列上。

  • 如果消费者很少,那么将消息放在这几个队列上的时间不会太长(除非生产者阻止,因为消费者无法跟上)。
  • 如果有很多消费者,在许多消费者互相争斗的情况下,这种情况将更为可取。

至少,这将是比较替代解决方案的一个好方法。