2015-09-24 5 views
0

У меня есть 2 простых вопроса. У меня есть LinkedBlockingQueue, который я создаю простоLinkedBlockingQueue - неограниченный - блокировка ввода?

new LinkedBlockingQueue()

Так что я думаю, что это гарантирует, что неограниченная, верно?
Если это так, правильно ли сказать, что метод put никогда не может блокировать при вызове в этом экземпляре очереди?

ответ

5

В документах Java указано, что значение no-arg constructor invocation будет иметь размер Integer.MAX_VALUE, который является большим, но не бесконечным, поэтому очередь ограничена (но для практических целей это может быть и не так).

Метод put будет блокироваться, только если пространство должно стать доступным, то есть оно будет блокироваться, если в очереди уже есть несколько элементов, равных емкости.

+0

Итак ... для 'put' для блокирования мне нужно уже иметь Integer.MAX_VALUE в этой очереди, справа (что практически означает, что он никогда не блокирует). –

+0

Да, точно, если вы используете конструктор no-arg. –

+0

Нет, это не значит, что он никогда не может блокироваться. Только это в вашем конкретном случае, если вы помещаете в эту очередь меньше элементов Integer.MAX_VALUE, тогда он не будет блокироваться. – Nikem

Смежные вопросы