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
или offer
null
. Значение A null
используется в качестве значения sentinel для обозначения сбоя операций poll
.
Может BlockingQueue
быть ограничена емкость. В любой момент времени он может иметь дополнительный remainingCapacity
элемент, за пределами которого дополнительные элементы не могут быть put
заблокированы. Без BlockingQueue
каких-либо внутренних ограничений емкости всегда сообщает о оставшейся емкости Integer.MAX_VALUE
.
BlockingQueue
реализации предназначены для использования в первую очередь для очередей производителей-потребителей, но также поддерживают Collection
интерфейс. Например, можно удалить произвольный элемент из очереди с помощью remove(x)
. Однако такие операции обычно <выполняются не</em>> очень эффективно и предназначены только для случайного использования, например при отмене сообщения в очереди.
BlockingQueue
реализации являются потокобезопасными. Все методы очереди обеспечивают их эффекты атомарно с помощью внутренних блокировок или других форм управления параллелизмом. Однако операции <>em bulk</>em>> Collection containsAll
addAll
и retainAll
removeAll
не< обязательно выполняются <атомарно, если в реализации не указано иное. Таким образом, можно, например, для 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 |
Возвращает, если этот |
JniIdentityHashCode |
Возвращает значение |
JniManagedPeerState |
Состояние управляемого однорангового узла. (Унаследовано от IJavaPeerable) |
JniPeerMembers |
Поддержка доступа к членам и вызовов. (Унаследовано от IJavaPeerable) |
PeerReference |
JniObjectReference Возвращает экземпляр объекта Java в оболочке. (Унаследовано от IJavaPeerable) |
Методы
Add(Object) |
Вставляет указанный элемент в эту очередь, если это можно сделать немедленно, не нарушая ограничения емкости, возвращая при успешном выполнении и вызывая |
AddAll(ICollection) |
Добавляет все элементы указанной коллекции в эту коллекцию (необязательно). (Унаследовано от ICollection) |
Clear() |
Удаляет все элементы из этой коллекции (необязательной операции). (Унаследовано от ICollection) |
Contains(Object) |
Возвращает значение |
ContainsAll(ICollection) |
Возвращает, |
Disposed() |
Вызывается при удалении экземпляра. (Унаследовано от IJavaPeerable) |
DisposeUnlessReferenced() |
Если нет невыполненных ссылок на этот экземпляр, то вызывается |
DrainTo(ICollection) |
Удаляет все доступные элементы из этой очереди и добавляет их в данную коллекцию. |
DrainTo(ICollection, Int32) |
Удаляет по крайней мере заданное количество доступных элементов из этой очереди и добавляет их в данную коллекцию. |
Element() |
Извлекает, но не удаляет голову этой очереди. (Унаследовано от IQueue) |
Equals(Object) |
Сравнивает указанный объект с этой коллекцией для равенства. (Унаследовано от ICollection) |
Finalized() |
Вызывается при завершении экземпляра. (Унаследовано от IJavaPeerable) |
ForEach(IConsumer) |
Выполняет заданное действие для каждого элемента |
GetHashCode() |
Возвращает хэш-значение кода для этой коллекции. (Унаследовано от ICollection) |
Iterator() |
Возвращает итератор по элементам в этой коллекции. (Унаследовано от ICollection) |
Offer(Object) |
Вставляет указанный элемент в эту очередь, если это можно сделать немедленно, не нарушая ограничения емкости, возвращая |
Offer(Object, Int64, TimeUnit) |
Вставляет указанный элемент в эту очередь, ожидая до указанного времени ожидания при необходимости, чтобы пространство стало доступным. |
Peek() |
Извлекает, но не удаляет, голову этой очереди или возвращает |
Poll() |
Извлекает и удаляет голову этой очереди или возвращает |
Poll(Int64, TimeUnit) |
Извлекает и удаляет голову этой очереди, ожидая до указанного времени ожидания, если необходимо, чтобы элемент стал доступным. |
Put(Object) |
Вставляет указанный элемент в эту очередь, ожидая, если необходимо, чтобы пространство стало доступным. |
RemainingCapacity() |
Возвращает количество дополнительных элементов, которые эта очередь может в идеале (в отсутствие ограничений памяти или ресурсов) принимать без блокировки или |
Remove() |
Извлекает и удаляет голову этой очереди. (Унаследовано от IQueue) |
Remove(Object) |
Удаляет один экземпляр указанного элемента из этой очереди, если он присутствует. |
RemoveAll(ICollection) |
Удаляет все элементы этой коллекции, которые также содержатся в указанной коллекции (необязательной операции). (Унаследовано от ICollection) |
RemoveIf(IPredicate) |
Удаляет все элементы этой коллекции, удовлетворяющие заданному предикату. (Унаследовано от ICollection) |
RetainAll(ICollection) |
Сохраняет только элементы этой коллекции, содержащиеся в указанной коллекции (необязательной операции). (Унаследовано от ICollection) |
SetJniIdentityHashCode(Int32) |
Задайте значение, возвращаемое |
SetJniManagedPeerState(JniManagedPeerStates) |
Это |
SetPeerReference(JniObjectReference) |
Задайте значение, возвращаемое |
Size() |
Возвращает количество элементов в этой коллекции. (Унаследовано от ICollection) |
Spliterator() |
|
Take() |
Извлекает и удаляет голову этой очереди, ожидая, если это необходимо, пока элемент не станет доступным. |
ToArray() |
Возвращает массив, содержащий все элементы в этой коллекции. (Унаследовано от ICollection) |
ToArray(IIntFunction) |
Возвращает массив, содержащий все элементы в этой коллекции, используя предоставленную |
ToArray(Object[]) |
Возвращает массив, содержащий все элементы в этой коллекции; Тип среды выполнения возвращаемого массива — это тип указанного массива. (Унаследовано от ICollection) |
UnregisterFromRuntime() |
Отмените регистрацию этого экземпляра, чтобы среда выполнения не возвращала ее из будущих Java.Interop.JniRuntime+JniValueManager.PeekValue вызовов. (Унаследовано от IJavaPeerable) |
Явные реализации интерфейса
IIterable.Spliterator() |
|
Методы расширения
JavaCast<TResult>(IJavaObject) |
Выполняет преобразование типа, проверяемого средой выполнения Android. |
JavaCast<TResult>(IJavaObject) |
Это |
GetJniTypeName(IJavaPeerable) |
Это |
OfferAsync(IBlockingQueue, Object) |
Это |
OfferAsync(IBlockingQueue, Object, Int64, TimeUnit) |
Это |
PollAsync(IBlockingQueue, Int64, TimeUnit) |
Это |
PutAsync(IBlockingQueue, Object) |
Это |
TakeAsync(IBlockingQueue) |
Это |
ToEnumerable(IIterable) |
Это |
ToEnumerable<T>(IIterable) |
Это |