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