Анализ примера использования BlockingQueue - PullRequest
0 голосов
/ 30 июня 2011

Я смотрел на «пример использования, основанный на типичном сценарии« производитель-потребитель »»: http://download.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/BlockingQueue.html#put(E)

Правильный ли пример?

Я думаю, что операции put и take нуждаются в блокировке какого-либо ресурса перед тем, как приступить к изменению очереди, но здесь этого не происходит.

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

Ответы [ 2 ]

3 голосов
/ 30 июня 2011

Я не думаю, что есть что-то, что можно добавить к тому, что написано в API:

Очередь, которая дополнительно поддерживает операции, ожидающие, пока очередь не станет пустой при извлечении элемента, иподождите, пока место станет доступным в очереди при хранении элемента.

Реализации BlockingQueue являются поточно-ориентированными.Все методы очередей достигают своих эффектов атомарно, используя внутренние блокировки или другие формы управления параллелизмом.

1 голос
/ 30 июня 2011

BlockingQueue - это просто интерфейс.Эта реализация может использовать синхронизированные блоки, блокировку или быть без блокировки.AFAIK большинство методов используют Lock в реализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...