我有三個Java的LinkedBlockingQueue
實例,我只想使用一個線程從中讀取(take
操作)。天真的方法是每個隊列有一個線程。從單個線程內的多個BlockingQueues中讀取
有沒有像UNIX的select
系統調用阻塞Java中的隊列?
謝謝。
我有三個Java的LinkedBlockingQueue
實例,我只想使用一個線程從中讀取(take
操作)。天真的方法是每個隊列有一個線程。從單個線程內的多個BlockingQueues中讀取
有沒有像UNIX的select
系統調用阻塞Java中的隊列?
謝謝。
那麼,這些BlockingQueues真的是要由他們自己的線程提供服務。
東西我會考慮嘗試是建立一個第四隊列小得多的項目,說Boolean
S,並且對每一個3個其他隊列的offer()
呼叫通過插入一個布爾成4隊列陪伴他們的插入。然後,您的線程可以在第四個隊列中進入睡眠狀態,當它醒來時,可以在另外3個隊列中找到peek()
以查找從哪裏獲得貨物。
我認爲這是一種非常不雅的解決方案,我懷疑有可能出現種族情況,在這種情況下,有些時候你不會被清醒地喚醒。但它應該基本上工作。
第4個隊列可以是隊列的隊列。當將一個元素添加到* ith *隊列中時,將* ith *隊列添加到第4個隊列中。在第4個隊列中被阻塞的線程take()將得到* ith *隊列,其中*可能*包含一個新元素。 – irreputable 2010-07-16 16:45:32
這是一個非常聰明的主意! +1。 – 2010-07-16 16:55:50
確實很聰明。 +1 – 2010-07-17 17:31:12
所以你想要三個隊列互相排斥,那就是一個線程一次可以從三個隊列中的一個隊列中讀取? – 2010-07-16 18:22:07