Короткая версия: Как лучше всего реализовать блокировку очереди FIFO в Java с возможностью временно пропускать или перепрыгивать элементы в очереди, если они не соответствуют определенным критериям в то время, когда онивыскочил из очереди?
Длинная версия:
Я уже много лет использую ArrayBlockingQueue в приложении, и он отлично работал для моих целей.Мне до сих пор нужно было только вызывать put () и take ().Он работал нормально.
Теперь существует требование, чтобы элемент удовлетворял определенным критериям, когда он извлекается с помощью take ().Если он не соответствует критериям, он должен вернуться в очередь, но в том же положении, в котором он находился ранее.
Представьте себе линию на таможне в международном аэропорту.По какой-то причине пассажирам выдали только форму таможенной декларации, когда они вышли на линию.Пассажиры все яростно строчат, чтобы закончить свою форму, прежде чем их очередь подходит.В передней части есть охранник.Когда таможенник готов к следующему пассажиру, охранник проверяет, заполнил ли первый пассажир на линии таможенную декларацию.Если это так, он отправляет pasenger таможеннику.Если нет, он проверяет второго пассажира, затем третьего и т. Д., Пока не найдет того, кто закончил.Он отправляет этого человека таможеннику.То же самое происходит каждый раз, когда таможенник освобождается, всегда запуская первого пассажира на линии.
При исследовании единственной вещи, которую я придумал, было использование двусторонней очереди (deque) и снятие элементов свперед, пока я не найду элемент, который соответствует критериям.Затем поместите элементы обратно на передний план в обратном порядке, в котором я их снял.
У кого-нибудь есть рекомендации?