Поделиться через


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"><caption Summary of LockQueue methods</caption>><tr><td/td><>< th scope="col" style="font-weight:normal; font-style:italic">Throws exception</th><th scope="col" style="font-weight:normal; font-style:italic">Special value</<>th th scope="col" style="font-weight:normal; font-style:italic"Blocks</<>th th scope="col" style=">font-weight:normal; font-style:italic">Times out</th></tr tr<>th<>scope="row-style="text-align:left">Insert</><th td>#add(Object) add(e)</>#offer(Object) offer(e)<#put(Object) put(e)><>><<><<><>#offer(Object, long, TimeUnit) offer(e, time, unit)tr tr<<>>th scope="row"style="text-align:left">Remove</><th td#remove() remove()></<><>#poll() poll()td/td/td>>#take() take()<<td/td></td/td><#poll(long, TimeUnit) poll(time, unit)></tr tr<<>>th scope="row" style="text-align:left">Examine</th>#element() element()<>< td/td/td td style="font-style: italic">not applicable</<>td td><style="font-style: itic">not applicable</>#peek() peek()<<>td<>/tr></table>

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

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

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

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

<A BlockingQueue не</em>> встроенно поддерживает любой вид " close" или " shutdown" операция, указывающая, что больше элементов не будет добавлено. Потребности и использование таких функций, как правило, зависят от реализации. Например, распространенная тактика заключается в том, чтобы производители вставляли специальные <объекты em-end-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>happen-before</i> после доступа или удаления этого элемента из BlockingQueue другого потока.

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

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

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

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

Свойства

Handle

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

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

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

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

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

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

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

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

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

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

JniObjectReference Возвращает экземпляр объекта Java в оболочке.

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

Методы

Add(Object)

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

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 также поддерживает операции, ожидающие того, что очередь станет непустой при получении элемента, и дождитесь того, чтобы пространство стало доступным в очереди при хранении элемента.

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