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><td>#element() element()</td/td td style="font-style: italic">not applicable</>#peek() peek()td td<>style="font-style: itic"<not applicable>/<><><td/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</>emaddAllcontainsAll Collection retainAllremoveAllи <> не< обязательно выполняются >атомарно, если в реализации не указано иное. Таким образом, можно, например, для addAll(c) сбоя (создание исключения) после добавления только некоторых элементов в c.
BlockingQueueA < не>/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.
Части этой страницы — это изменения на основе работы, созданной и общей Project и используемых в соответствии с условиями, описанными в разделе "".
Свойства
| Имя. | Описание |
|---|---|
| Handle |
Возвращает значение JNI базового объекта Android. (Унаследовано от IJavaObject) |
| IsEmpty |
Возвращает, |
| JniIdentityHashCode |
Возвращает значение |
| JniManagedPeerState |
Состояние управляемого однорангового узла. (Унаследовано от IJavaPeerable) |
| JniObjectReferenceControlBlock |
Это |
| JniPeerMembers |
Поддержка доступа к членам и вызовов. (Унаследовано от IJavaPeerable) |
| PeerReference |
JniObjectReference Возвращает экземпляр объекта в оболочке Java. (Унаследовано от IJavaPeerable) |
Методы
| Имя. | Описание |
|---|---|
| Add(Object) |
Вставляет указанный элемент в эту очередь, если это можно сделать немедленно, не нарушая ограничения емкости, возвращая при успешном выполнении и вызывая |
| AddAll(ICollection) |
Добавляет все элементы указанной коллекции в эту коллекцию (необязательно). (Унаследовано от ICollection) |
| Clear() |
Удаляет все элементы из этой коллекции (необязательной операции). (Унаследовано от ICollection) |
| Contains(Object) |
Возвращает значение |
| ContainsAll(ICollection) |
Возвращает, |
| Disposed() |
Вызывается при удалении экземпляра. (Унаследовано от IJavaPeerable) |
| DisposeUnlessReferenced() |
Если нет невыполненных ссылок на этот экземпляр, то вызывается |
| DrainTo(ICollection, Int32) |
Удаляет по крайней мере заданное количество доступных элементов из этой очереди и добавляет их в данную коллекцию. |
| DrainTo(ICollection) |
Удаляет все доступные элементы из этой очереди и добавляет их в данную коллекцию. |
| Element() |
Извлекает, но не удаляет голову этой очереди. (Унаследовано от IQueue) |
| Equals(Object) |
Сравнивает указанный объект с этой коллекцией для равенства. (Унаследовано от ICollection) |
| Finalized() |
Вызывается при завершении экземпляра. (Унаследовано от IJavaPeerable) |
| ForEach(IConsumer) |
Выполняет заданное действие для каждого элемента |
| GetHashCode() |
Возвращает хэш-значение кода для этой коллекции. (Унаследовано от ICollection) |
| Iterator() |
Возвращает итератор по элементам в этой коллекции. (Унаследовано от ICollection) |
| Offer(Object, Int64, TimeUnit) |
Вставляет указанный элемент в эту очередь, ожидая до указанного времени ожидания при необходимости, чтобы пространство стало доступным. |
| Offer(Object) |
Вставляет указанный элемент в эту очередь, если это можно сделать немедленно, не нарушая ограничения емкости, возвращая |
| 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() |
|
Методы расширения
| Имя. | Описание |
|---|---|
| GetJniTypeName(IJavaPeerable) |
Возвращает имя JNI типа экземпляра |
| JavaAs<TResult>(IJavaPeerable) |
Попробуйте принуждать к типу |
| JavaCast<TResult>(IJavaObject) |
Выполняет преобразование типа, проверяемого средой выполнения Android. |
| JavaCast<TResult>(IJavaObject) |
Это |
| OfferAsync(IBlockingQueue, Object, Int64, TimeUnit) |
Это |
| OfferAsync(IBlockingQueue, Object) |
Это |
| PollAsync(IBlockingQueue, Int64, TimeUnit) |
Это |
| PutAsync(IBlockingQueue, Object) |
Это |
| TakeAsync(IBlockingQueue) |
Это |
| ToEnumerable(IIterable) |
Возвращает итерацию IEnumerable по JavaIIterable, позволяя |
| ToEnumerable<T>(IIterable) |
Возвращает итерацию IEnumerable<T> по JavaIIterable, маршалинг каждого элемента |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
Попробуйте принуждать к типу |