Что такое Thread-Safe BlockingQueue в Java? Когда вы должны использовать его? Реализация прилагается

Опубликовано: 2021-04-30
Что такое Threadsafe BlockingQueue в Java и когда его следует использовать

На данный момент я написал две статьи о концепции производителя-потребителя на Crunchify. 1-й объясняет Java-семафор и мьютекс, а 2-й объясняет параллельное чтение/запись.

В этом руководстве по Java мы рассмотрим ту же концепцию производителя/потребителя, чтобы объяснить BlockingQueue in Java .

Каковы преимущества Blocking Queue в Java?

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

java.util.BlockingQueue в java - Crunchify

Нам нужно создать четыре класса Java:

  1. CrunchifyMessage.java для отправки и получения сообщения
  2. CrunchifyBlockingProducer.java для помещения сообщения в очередь
  3. CrunchifyBlockingConsumer.java для получения сообщения из очереди
  4. CrunchifyBlockingMain.java для запуска теста

Реализации BlockingQueue thread-safe . Все методы очередей атомарны по своей природе и используют внутренние блокировки.

Приступим к реализации Thread-Safe BlockingQueue в Java.

Шаг 1

Создайте класс CrunchifyMessage.java . Это простой объект Java.

Шаг 2

Создайте производителя CrunchifyBlockingProducer.java , который создал простое сообщение и поместил его в очередь.

Шаг 3

Создайте класс CrunchifyBlockingConsumer.java , который использует сообщения из очереди.

Шаг-4

Создайте простой метод CrunchifyBlockingMain.java , который запускает тест BlockingQueue. Запустите эту программу, чтобы проверить поведение BlockingQueue.

BlockingQueue не принимает пустые элементы. Реализации выдают исключение NullPointerException при попытках добавить , поместить или предложить нуль .

Нуль используется в качестве контрольного значения, чтобы указать на сбой операций опроса .

Результат:

Когда мы должны использовать java.util.concurrent.BlockingQueue?

  • Если вы хотите ограничить какой-либо входящий запрос, вы должны использовать тот же
  • Производители могут значительно опередить потребителей с неограниченной очередью. Если потребитель не догоняет производителя, это может вызвать OutOfMemoryError . В подобных ситуациях может быть лучше сообщить потенциальному производителю, что очередь заполнена, и быстро сдаться в случае сбоя.
    • Другими словами: производители, естественно, задушены.
  • Блокирующая очередь обычно используется в параллельном приложении.
  • Он обеспечивает правильную, потокобезопасную реализацию
  • Потребление памяти также должно быть ограничено