从单个线程中的多个BlockingQueues读取

时间:2010-07-16 16:23:28

标签: java select blockingqueue

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

是否有类似于UNIX select系统调用阻止Java中的队列?

感谢。

1 个答案:

答案 0 :(得分:2)

嗯,那些BlockingQueues真的是由他们自己的Threads提供服务。

我考虑尝试的是为更小的项目设置第4个队列,比如说Boolean s,并且通过插入在其他3个队列中的每个队列上都有offer()个调用第四个队列中的布尔值。然后你的线程可以在第4个队列中进入休眠状态,当它被唤醒时,它可以peek()在另外3个队列中找到获取货物的位置。

我认为,非常不优雅的解决方案,我怀疑有可能存在竞争条件,在某些情况下你不会被彻底吵醒。但它应该基本起作用。