Looking for java Keywords? Try Ask4Keywords

Java Language BlockingQueue


пример

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

Методы BlockingQueue представлены в четырех формах с различными способами обработки операций, которые не могут быть удовлетворены немедленно, но могут быть удовлетворены в какой-то момент в будущем: один генерирует исключение, второй возвращает специальное значение (либо null, либо false, в зависимости от операция), третий блокирует текущую нить неопределенно до тех пор, пока операция не будет успешной, а четвертые блоки только для заданного максимального срока до отказа.

операция Выбрасывает исключение Специальная ценность Блоки Время вышло
Вставить добавлять() предложение (е) ставить (е) предложение (e, время, единица)
Удалить Удалить() опрос() брать () опрос (время, единица)
исследовать элемент() PEEK () N / A N / A

BlockingQueue может быть ограниченным или неограниченным . Ограниченный BlockingQueue - это тот, который инициализируется начальной загрузкой.

BlockingQueue<String> bQueue = new ArrayBlockingQueue<String>(2);

Любые вызовы метода put () будут заблокированы, если размер очереди равен начальной заданной емкости.

Неограниченная очередь - это то, которое инициализируется без емкости, фактически по умолчанию оно инициализируется Integer.MAX_VALUE.


Некоторые общие реализации BlockingQueue :

  1. ArrayBlockingQueue
  2. LinkedBlockingQueue
  3. PriorityBlockingQueue

Теперь давайте рассмотрим пример ArrayBlockingQueue :

BlockingQueue<String> bQueue = new ArrayBlockingQueue<>(2);
bQueue.put("This is entry 1");
System.out.println("Entry one done");
bQueue.put("This is entry 2");
System.out.println("Entry two done");
bQueue.put("This is entry 3");
System.out.println("Entry three done");

Это напечатает:

Entry one done
Entry two done

И поток будет заблокирован после второго выхода.