Каковы преимущества блокировки очереди в Java? - PullRequest
17 голосов
/ 06 мая 2009

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

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

Каковы другие преимущества использования очереди блокировки для вышеуказанного приложения? (Пример: производительность, возможность изменения кода, любые специальные трюки и т. Д.)

Ответы [ 2 ]

27 голосов
/ 06 мая 2009

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

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

6 голосов
/ 06 мая 2009

Ключевой вещью, которую вы исключаете из очереди блокировки, является «опрос». Здесь вы говорите

В этом случае 2-му потоку необходимо периодически проверять информацию на очереди.

Это может быть очень неэффективно - использовать много ненужного процессорного времени. Это также может привести к ненужным задержкам.

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