Чтение из нескольких BlockingQueues в одном потоке - PullRequest
3 голосов
/ 16 июля 2010

У меня есть три экземпляра Java LinkedBlockingQueue, и я хотел бы читать из них (операция take) только с использованием одного потока. Наивный подход состоит в том, чтобы иметь один поток на очередь.

Есть ли что-то похожее на системный вызов UNIX select для блокировки очередей в Java?

Спасибо.

1 Ответ

2 голосов
/ 16 июля 2010

Ну, эти BlockingQueues действительно предназначались для обслуживания их собственными потоками.

Я бы хотел попробовать установить 4-ю очередь для гораздо меньших элементов, скажем, Boolean s, и сделать так, чтобы вызовы offer() в каждой из 3 других очередей сопровождали их вставку, вставляяBoolean в эту 4-ую очередь.Затем ваш поток может перейти в спящий режим в 4-й очереди, а когда он проснется, он может peek() в остальных 3-х узнать, где взять товар.

Я думаю, что это крайне неэлегантное решениеподозреваю, что возможны гоночные условия, когда вас не разбудят несколько раз.Но это должно в основном работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...