IBlockingQueue Интерфейс

Определение

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

[Android.Runtime.Register("java/util/concurrent/BlockingQueue", "", "Java.Util.Concurrent.IBlockingQueueInvoker")]
[Java.Interop.JavaTypeParameters(new System.String[] { "E" })]
public interface IBlockingQueue : IDisposable, Java.Interop.IJavaPeerable, Java.Util.IQueue
[<Android.Runtime.Register("java/util/concurrent/BlockingQueue", "", "Java.Util.Concurrent.IBlockingQueueInvoker")>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "E" })>]
type IBlockingQueue = interface
    interface IQueue
    interface ICollection
    interface IIterable
    interface IJavaObject
    interface IDisposable
    interface IJavaPeerable
Производный
Атрибуты
Реализации

Комментарии

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

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

<table class="plain">подпись Summary of BlockingQueue methods</подпись>< tr<>td></td><th область="col" style="font-weight:normal; font-style:italic">Throws exception</th<>область="col" style="font-weight:normal; font-style:italic">Special value</th область<>><="col" style="font-weight:normal; font-style:italic">Blocks</th><th область="col" style="font-weight:normal; font-style:italic">Times out</th<>/tr><th<>область="row" style="text-align:left">Insert</th><td><#add(Object) add(e)/td><td<>#offer(Object) offer(e)/td td>#put(Object) put(e)</td<>>><<<>#offer(Object, long, TimeUnit) offer(e, time, unit)/tr><tr><th область="row" style="text-align:left">Remove</th<>td<#remove() remove()>/td><td#poll() poll()></td<>td#take() take()<>/td td<#poll(long, TimeUnit) poll(time, unit)>/td><<>/tr<>tr th><область="row" style="text-align:left">Examine</th<>td<>#element() element()/td td><>#peek() peek()</Td><td style="font-style: italic">not applicable</td><td style="font-style: italic">not applicable</td></tr></table>

Объект BlockingQueue не принимает null элементы . Реализации вызывают при NullPointerException попытках к add, put или offernull. Используется null в качестве значения sentinel, чтобы указать на сбой операций poll .

Может BlockingQueue быть ограничена емкостью. В любой момент времени он может иметь значение , remainingCapacity после которого никакие дополнительные элементы не могут быть put без блокировки. Объект BlockingQueue без внутренних ограничений емкости всегда сообщает о оставшейся емкости Integer.MAX_VALUE.

BlockingQueue Реализации предназначены для использования в основном для очередей "производитель — потребитель", но дополнительно поддерживают Collection интерфейс . Например, можно удалить произвольный элемент из очереди с помощью remove(x). Однако такие операции, как правило<><>, не выполняются очень эффективно и предназначены только для случайного использования, например при отмене сообщения в очереди.

BlockingQueue реализации являются потокобезопасны. Все методы очередей достигают своих последствий атомарно с помощью внутренних блокировок или других форм управления параллелизмом. Однако операции em bulk/em> Collection , retainAllcontainsAllи removeAll не обязательно выполняются <>атомарно, если в реализации не<> указано иное.<>addAll< Таким образом, возможно, например, сбой addAll(c) (создание исключения) после добавления только некоторых элементов в c.

Не BlockingQueue поддерживает <или>не<> поддерживает любой тип " закрыть" или " shutdown" операция , указывающая, что больше не будут добавляться элементы. Потребности и использование таких функций, как правило, зависят от реализации. Например, распространенной тактикой является вставка производителями специальных <объектов em>end-of-stream</em> или <em>poison</em> , которые интерпретируются соответствующим образом при использовании потребителями.

Пример использования на основе типичного сценария "производитель — потребитель". Обратите внимание, что BlockingQueue можно безопасно использовать с несколькими производителями и несколькими потребителями.

{@code
            class Producer implements Runnable {
              private final BlockingQueue queue;
              Producer(BlockingQueue q) { queue = q; }
              public void run() {
                try {
                  while (true) { queue.put(produce()); }
                } catch (InterruptedException ex) { ... handle ...}
              }
              Object produce() { ... }
            }

            class Consumer implements Runnable {
              private final BlockingQueue queue;
              Consumer(BlockingQueue q) { queue = q; }
              public void run() {
                try {
                  while (true) { consume(queue.take()); }
                } catch (InterruptedException ex) { ... handle ...}
              }
              void consume(Object x) { ... }
            }

            class Setup {
              void main() {
                BlockingQueue q = new SomeQueueImplementation();
                Producer p = new Producer(q);
                Consumer c1 = new Consumer(q);
                Consumer c2 = new Consumer(q);
                new Thread(p).start();
                new Thread(c1).start();
                new Thread(c2).start();
              }
            }}

Эффекты согласованности памяти. Как и в случае с другими параллельными коллекциями, действия в потоке перед помещением объекта в BlockingQueue<действие i>происходят до</i> после доступа или удаления этого элемента из в другом потоке BlockingQueue .

Этот интерфейс является членом Платформы коллекций Java.

Добавлено в версии 1.5.

Документация по Java для java.util.concurrent.BlockingQueue.

Части этой страницы являются изменениями, основанными на работе, созданной и совместно используемой проектом и используемой в соответствии с условиями, Creative Commons 2.5 Attribution License Creative Commons 2.5 Attribution License.

Свойства

Handle

Возвращает значение JNI базового объекта Android.

(Унаследовано от IJavaObject)
IsEmpty

Возвращает значение , если не Collection содержит элементов.

(Унаследовано от ICollection)
JniIdentityHashCode

Возвращает значение для упаковаемого java.lang.System.identityHashCode() экземпляра.

(Унаследовано от IJavaPeerable)
JniManagedPeerState

Состояние управляемого однорангового узла.

(Унаследовано от IJavaPeerable)
JniPeerMembers

Поддержка доступа и вызова участников.

(Унаследовано от IJavaPeerable)
PeerReference

JniObjectReference Возвращает экземпляр объекта Java, заключенный в оболочку.

(Унаследовано от IJavaPeerable)

Методы

Add(Object)

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

AddAll(ICollection)

Добавляет все элементы из указанной коллекции в эту коллекцию (необязательная операция).

(Унаследовано от ICollection)
Clear()

Удаляет все элементы из этой коллекции (необязательная операция).

(Унаследовано от ICollection)
Contains(Object)

Возвращает значение true , если эта очередь содержит указанный элемент.

ContainsAll(ICollection)

Возвращает значение true , если эта коллекция содержит все элементы указанной коллекции.

(Унаследовано от ICollection)
Disposed()

Вызывается при удалении экземпляра.

(Унаследовано от IJavaPeerable)
DisposeUnlessReferenced()

Если отсутствуют незадающиеся ссылки на этот экземпляр, вызывает Dispose(); в противном случае ничего не делает.

(Унаследовано от IJavaPeerable)
DrainTo(ICollection)

Удаляет все доступные элементы из этой очереди и добавляет их в указанную коллекцию.

DrainTo(ICollection, Int32)

Удаляет не более заданного числа доступных элементов из этой очереди и добавляет их в указанную коллекцию.

Element()

Извлекает, но не удаляет, головку этой очереди.

(Унаследовано от IQueue)
Equals(Object)

Сравнивает указанный объект с данной коллекцией на равенство.

(Унаследовано от ICollection)
Finalized()

Вызывается после завершения работы экземпляра.

(Унаследовано от IJavaPeerable)
ForEach(IConsumer)

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

(Унаследовано от IIterable)
GetHashCode()

Возвращает значение хэш-кода для этой коллекции.

(Унаследовано от ICollection)
Iterator()

Возвращает итератор по элементам в этой коллекции.

(Унаследовано от ICollection)
Offer(Object)

Вставляет указанный элемент в эту очередь, если это возможно немедленно, не нарушая ограничения емкости, возвращая true при успешном выполнении и false если в настоящее время нет свободного места.

Offer(Object, Int64, TimeUnit)

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

Peek()

Извлекает, но не удаляет головку этой очереди или возвращает null значение , если очередь пуста.

(Унаследовано от IQueue)
Poll()

Извлекает и удаляет головку этой очереди или возвращает null значение , если очередь пуста.

(Унаследовано от IQueue)
Poll(Int64, TimeUnit)

Извлекает и удаляет головку этой очереди, ожидая до указанного времени ожидания, если это необходимо для того, чтобы элемент стал доступным.

Put(Object)

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

RemainingCapacity()

Возвращает количество дополнительных элементов, которые эта очередь может в идеале (при отсутствии ограничений памяти или ресурсов) принимать без блокировки или Integer.MAX_VALUE при отсутствии встроенного ограничения.

Remove()

Извлекает и удаляет головку этой очереди.

(Унаследовано от IQueue)
Remove(Object)

Удаляет один экземпляр указанного элемента из этой очереди, если он имеется.

RemoveAll(ICollection)

Удаляет все элементы этой коллекции, которые также содержатся в указанной коллекции (необязательная операция).

(Унаследовано от ICollection)
RemoveIf(IPredicate)

Удаляет все элементы этой коллекции, удовлетворяющие заданному предикату.

(Унаследовано от ICollection)
RetainAll(ICollection)

Сохраняет только элементы в этой коллекции, содержащиеся в указанной коллекции (необязательная операция).

(Унаследовано от ICollection)
SetJniIdentityHashCode(Int32)

Задайте значение, возвращаемое .JniIdentityHashCode

(Унаследовано от IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

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

(Унаследовано от IJavaPeerable)
SetPeerReference(JniObjectReference)

Задайте значение, возвращаемое .PeerReference

(Унаследовано от IJavaPeerable)
Size()

Возвращает количество элементов в этой коллекции.

(Унаследовано от ICollection)
Spliterator()

Создает над Spliterator элементами, описанными этим Iterable.

(Унаследовано от IIterable)
Take()

Извлекает и удаляет головку этой очереди, при необходимости ожидая, пока элемент не станет доступным.

ToArray()

Возвращает массив, содержащий все элементы в этой коллекции.

(Унаследовано от ICollection)
ToArray(IIntFunction)

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

(Унаследовано от ICollection)
ToArray(Object[])

Возвращает массив, содержащий все элементы в этой коллекции; Тип среды выполнения возвращаемого массива равен типу указанного массива.

(Унаследовано от ICollection)
UnregisterFromRuntime()

Отмените регистрацию этого экземпляра, чтобы среда выполнения не возвращала его из будущих Java.Interop.JniRuntime+JniValueManager.PeekValue вызовов.

(Унаследовано от IJavaPeerable)

Явные реализации интерфейса

IIterable.Spliterator()

Создает над Spliterator элементами в этой коллекции.

(Унаследовано от ICollection)

Методы расширения

JavaCast<TResult>(IJavaObject)

Выполняет преобразование типа, проверенное средой выполнения Android.

JavaCast<TResult>(IJavaObject)

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

GetJniTypeName(IJavaPeerable)

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

OfferAsync(IBlockingQueue, Object)

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

OfferAsync(IBlockingQueue, Object, Int64, TimeUnit)

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

PollAsync(IBlockingQueue, Int64, TimeUnit)

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

PutAsync(IBlockingQueue, Object)

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

TakeAsync(IBlockingQueue)

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

ToEnumerable(IIterable)

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

ToEnumerable<T>(IIterable)

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

Применяется к