Вопрос

Метод java.util.concurrent.blockingqueue.add (e e) javadoC гласит:

Boolean Add (e e)

Вставляет указанный элемент в эту очередь, если можно сделать это немедленно без нарушения ограничений емкости, возвращаясь к успеху и бросать нелегальноесейтеЭкс восприятие, если в настоящее время нет места. При использовании очереди ограниченной емкости он обычно предпочтительнее использования предлагаемого.

Мой вопрос: будет ли когда-нибудь вернуть ложь? Если нет, почему этот метод возвращает логию? Кажется, странно для меня. Что такое решение дизайна за этим?

Спасибо за ваши знания!
Мануэль

Это было полезно?

Решение

Отсюда следует договор Collection.add(E e) (поскольку BlockingQueue это подтип Collection):

Если коллекция отказывается добавить определенный элемент по любой причине, кроме того, он уже содержит элемент, он должен выбрасывать исключение (а не возвращать false). Это сохраняет инвариант, что коллекция всегда содержит указанный элемент после возвращения этого вызова.

Другие советы

Решение позади: провалиться быстро. RegalAlStateException будет брошено, если очередь имеет ограниченную мощность. ReganalstateException - это runtimeexception. Поэтому, если исключение бросается, вы, вероятно, у вас, вероятно, ошибается в вашей логике приложений или логика приложения недостаточно защищена. Или сказать это другими словами: если вы хотите использовать ограниченную очередь, ваше приложение должно иметь дело правильно (использовать offer вместо).

Я предполагаю, что у него есть булева возврата, потому что это поддержание Queue, который также имеет boolean add(E obj) метод (который в свою очередь выводится из Collection). Определенный Queue Реализации отклонить попытки добавления объектов в очередь, возвращая ложь.

Таким образом, ответ на ваш вопрос заключается в том, что реализации блокировки никогда не вернут ложь.

Метод возвращает логию, потому что он переопределяет Collection#add(E e).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top