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
или offer
null
. Используется null
в качестве значения sentinel, чтобы указать на сбой операций poll
.
Может BlockingQueue
быть ограничена емкостью. В любой момент времени он может иметь значение , remainingCapacity
после которого никакие дополнительные элементы не могут быть put
без блокировки. Объект BlockingQueue
без внутренних ограничений емкости всегда сообщает о оставшейся емкости Integer.MAX_VALUE
.
BlockingQueue
Реализации предназначены для использования в основном для очередей "производитель — потребитель", но дополнительно поддерживают Collection
интерфейс . Например, можно удалить произвольный элемент из очереди с помощью remove(x)
. Однако такие операции, как правило<><>, не выполняются очень эффективно и предназначены только для случайного использования, например при отмене сообщения в очереди.
BlockingQueue
реализации являются потокобезопасны. Все методы очередей достигают своих последствий атомарно с помощью внутренних блокировок или других форм управления параллелизмом. Однако операции em bulk/em> Collection , retainAll
containsAll
и 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 |
Возвращает значение , если не |
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) |
Объект , |