Я не уверен в описании вашего вопроса, нужно ли потокам удалять элементы в строгом циклическом порядке. Предполагая, что это не ограничение, вы можете использовать метод BlockingQueue
take()
, который заставит поток блокироваться до тех пор, пока данные не станут доступны (следовательно, не использует ЦП циклов).
Также обратите внимание, что take()
реализации являются атомарными (например, LinkedBlockingQueue
): если несколько потоков заблокированы на take()
и один элемент помещен в очередь, тогда только один поток вызов take () вернется; другой останется заблокированным.