Или, может быть, лучше использовать другой класс для синхронизированного доступа к данным?
Используйте LinkedBlockingDeque, если хотите манипулировать обоими концами очереди.
LinkedBlockingDeque
Вы можете изменить элемент в заголовке связанной очереди блокировки (используйте peek() для его получения. Если вы хотите добавить элементы в заголовок структуры данных, используйте вместо этого LinkedBlockingDeque .
peek()
Не уверен, правильно ли я понял ваш вопрос, но LinkedBlockingDeque обеспечивает операции FIFO и LIFO (аналогично стеку). Может быть, он делает то, что вы хотите.