Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我有三个 JavaLinkedBlockingQueue实例,我想take只使用一个线程从它们中读取(操作)。天真的方法是每个队列有一个线程。
LinkedBlockingQueue
take
有没有像 UNIXselect系统调用那样在 Java 中阻塞队列?
select
谢谢。
好吧,那些 BlockingQueue 真的是由它们自己的线程来服务的。
我会考虑尝试为更小的项目设置第 4 个队列,比如Booleans,并通过在offer()第 4 个队列中插入一个布尔值,让其他 3 个队列中的每个队列的调用伴随它们的插入。然后,您的线程可以在第 4 个队列中进入睡眠状态,当它醒来时,它可以peek()在其他 3 个队列中找出从哪里获取货物。
Boolean
offer()
peek()
我认为非常不雅的解决方案,并且我怀疑可能存在一些比赛条件,您有时不会被干净地唤醒。但它应该基本上可以工作。