Это потому, что этот вызов изменяет коллекцию queue
:
String string = queue.poll();
Из Очередь JavaDoc:
Извлекает и удаляет заголовок этой очереди или возвращает ноль, если эта очередь пуста.
Блокировки чтения предназначены для использования в ситуациях, когда несколько потоков могут безопасно читать , тогда как записи должны выполняться исключительно (никаких других операций чтения и записи).).Поскольку вы используете блокировку чтения для poll
очереди (операция записи!), Вы фактически позволяете нескольким потокам одновременно изменять не-небезопасный LinkedList
.
Блокировка чтения-записи не является правильноймеханизм синхронизации в этом случае.