Подтвердить что ты не робот

Каковы преимущества блокировки очереди в Java?

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

В этом случае второй поток должен периодически проверять очередь для информации.

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