3

我有三个 JavaLinkedBlockingQueue实例,我想take只使用一个线程从它们中读取(操作)。天真的方法是每个队列有一个线程。

有没有像 UNIXselect系统调用那样在 Java 中阻塞队列?

谢谢。

4

1 回答 1

2

好吧,那些 BlockingQueue 真的是由它们自己的线程来服务的。

我会考虑尝试为更小的项目设置第 4 个队列,比如Booleans,并通过在offer()第 4 个队列中插入一个布尔值,让其他 3 个队列中的每个队列的调用伴随它们的插入。然后,您的线程可以在第 4 个队列中进入睡眠状态,当它醒来时,它可以peek()在其他 3 个队列中找出从哪里获取货物。

我认为非常不雅的解决方案,并且我怀疑可能存在一些比赛条件,您有时不会被干净地唤醒。但它应该基本上可以工作。

于 2010-07-16T16:35:30.803 回答