Интерфейс java.util.concurrent.BlockingQueue является подынтерфейсом интерфейса очереди и дополнительно поддерживает такие операции, как ожидание того, что очередь станет непустой перед извлечением элемента, и ожидание появления пространства в очереди перед сохранением элемента. ,
Методы блокировки
Sr.No. | Метод и описание |
---|---|
1 |
логическое сложение (E e) Вставляет указанный элемент в эту очередь, если это можно сделать немедленно, не нарушая ограничения емкости, возвращая true при успешном завершении и выбрасывая исключение IllegalStateException, если в настоящее время нет свободного места. |
2 |
логическое значение содержит (объект o) Возвращает true, если эта очередь содержит указанный элемент. |
3 |
int driTo (Коллекция <? super E> c) Удаляет все доступные элементы из этой очереди и добавляет их в заданную коллекцию. |
4 |
int driTo (Коллекция <? super E> c, int maxElements) Удаляет не более заданного количества доступных элементов из этой очереди и добавляет их в заданную коллекцию. |
5 |
булево предложение (E e) Вставляет указанный элемент в эту очередь, если это можно сделать немедленно, не нарушая ограничения по емкости, возвращая значение true в случае успеха и значение false, если в настоящее время нет свободного места. |
6 |
логическое предложение (E e, длительное время ожидания, единица времени) Вставляет указанный элемент в эту очередь, ожидая до указанного времени ожидания, если необходимо, чтобы освободилось пространство. |
7 |
E опрос (длительное время ожидания, единица времени) Извлекает и удаляет заголовок этой очереди, ожидая до указанного времени ожидания, если необходимо, чтобы элемент стал доступен. |
8 |
пустота (E e) Вставляет указанный элемент в эту очередь, ожидая, если необходимо, чтобы освободилось место. |
9 |
int оставшийсяCapacity () Возвращает количество дополнительных элементов, которые эта очередь может в идеале (при отсутствии ограничений памяти или ресурсов) принять без блокировки, или Integer.MAX_VALUE, если нет внутреннего ограничения. |
10 |
логическое удаление (объект o) Удаляет один экземпляр указанного элемента из этой очереди, если он присутствует. |
11 |
E взять () Извлекает и удаляет заголовок этой очереди, ожидая при необходимости, пока элемент не станет доступным. |
логическое сложение (E e)
Вставляет указанный элемент в эту очередь, если это можно сделать немедленно, не нарушая ограничения емкости, возвращая true при успешном завершении и выбрасывая исключение IllegalStateException, если в настоящее время нет свободного места.
логическое значение содержит (объект o)
Возвращает true, если эта очередь содержит указанный элемент.
int driTo (Коллекция <? super E> c)
Удаляет все доступные элементы из этой очереди и добавляет их в заданную коллекцию.
int driTo (Коллекция <? super E> c, int maxElements)
Удаляет не более заданного количества доступных элементов из этой очереди и добавляет их в заданную коллекцию.
булево предложение (E e)
Вставляет указанный элемент в эту очередь, если это можно сделать немедленно, не нарушая ограничения по емкости, возвращая значение true в случае успеха и значение false, если в настоящее время нет свободного места.
логическое предложение (E e, длительное время ожидания, единица времени)
Вставляет указанный элемент в эту очередь, ожидая до указанного времени ожидания, если необходимо, чтобы освободилось пространство.
E опрос (длительное время ожидания, единица времени)
Извлекает и удаляет заголовок этой очереди, ожидая до указанного времени ожидания, если необходимо, чтобы элемент стал доступен.
пустота (E e)
Вставляет указанный элемент в эту очередь, ожидая, если необходимо, чтобы освободилось место.
int оставшийсяCapacity ()
Возвращает количество дополнительных элементов, которые эта очередь может в идеале (при отсутствии ограничений памяти или ресурсов) принять без блокировки, или Integer.MAX_VALUE, если нет внутреннего ограничения.
логическое удаление (объект o)
Удаляет один экземпляр указанного элемента из этой очереди, если он присутствует.
E взять ()
Извлекает и удаляет заголовок этой очереди, ожидая при необходимости, пока элемент не станет доступным.
пример
Следующая программа TestThread показывает использование интерфейса BlockingQueue в поточной среде.
import java.util.Random; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; public class TestThread { public static void main(final String[] arguments) throws InterruptedException { BlockingQueue<Integer> queue = new ArrayBlockingQueue<Integer>(10); Producer producer = new Producer(queue); Consumer consumer = new Consumer(queue); new Thread(producer).start(); new Thread(consumer).start(); Thread.sleep(4000); } static class Producer implements Runnable { private BlockingQueue<Integer> queue; public Producer(BlockingQueue queue) { this.queue = queue; } @Override public void run() { Random random = new Random(); try { int result = random.nextInt(100); Thread.sleep(1000); queue.put(result); System.out.println("Added: " + result); result = random.nextInt(100); Thread.sleep(1000); queue.put(result); System.out.println("Added: " + result); result = random.nextInt(100); Thread.sleep(1000); queue.put(result); System.out.println("Added: " + result); } catch (InterruptedException e) { e.printStackTrace(); } } } static class Consumer implements Runnable { private BlockingQueue<Integer> queue; public Consumer(BlockingQueue queue) { this.queue = queue; } @Override public void run() { try { System.out.println("Removed: " + queue.take()); System.out.println("Removed: " + queue.take()); System.out.println("Removed: " + queue.take()); } catch (InterruptedException e) { e.printStackTrace(); } } } }
Это даст следующий результат.