Condividi tramite


IBlockingQueue Interfaccia

Definizione

Oggetto Queue che supporta anche operazioni che attendono che la coda diventi non vuota durante il recupero di un elemento e attenda che lo spazio diventi disponibile nella coda durante l'archiviazione di un elemento.

[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
Derivato
Attributi
Implementazioni

Commenti

Oggetto Queue che supporta anche operazioni che attendono che la coda diventi non vuota durante il recupero di un elemento e attenda che lo spazio diventi disponibile nella coda durante l'archiviazione di un elemento.

BlockingQueueI metodi sono disponibili in quattro forme, con diversi modi di gestire le operazioni che non possono essere soddisfatte immediatamente, ma possono essere soddisfatte in un determinato momento in futuro: una genera un'eccezione, la seconda restituisce un valore speciale (o false, null a seconda dell'operazione), il terzo blocca il thread corrente per un tempo illimitato fino a quando l'operazione non può avere esito positivo e il quarto blocco solo per un determinato limite di tempo massimo prima di rinunciare. Questi metodi sono riepilogati nella tabella seguente:

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

Un BlockingQueue oggetto non accetta null elementi. Le implementazioni generano NullPointerException sui tentativi di addo putoffer .null Un null oggetto viene usato come valore sentinel per indicare un errore di poll operazioni.

Un BlockingQueue oggetto può essere delimitato dalla capacità. In qualsiasi momento può avere un oggetto remainingCapacity al di là del quale nessun elemento aggiuntivo può essere put senza blocco. Un BlockingQueue oggetto senza vincoli di capacità intrinseci segnala sempre una capacità rimanente di Integer.MAX_VALUE.

BlockingQueue le implementazioni sono progettate per essere usate principalmente per le code producer-consumer, ma supportano anche l'interfaccia Collection . Ad esempio, è possibile rimuovere un elemento arbitrario da una coda usando remove(x). Tuttavia, tali operazioni sono in genere <em>not</em> eseguite in modo molto efficiente e sono destinate solo a uso occasionale, ad esempio quando un messaggio in coda viene annullato.

BlockingQueue le implementazioni sono thread-safe. Tutti i metodi di accodamento ottengono gli effetti atomicamente usando blocchi interni o altre forme di controllo della concorrenza. Tuttavia, le <operazioni addAlldi raccolta bulk</em> em>, containsAllretainAll e removeAll sono <em>not</em> eseguite necessariamente in modo atomico, a meno che non specificato diversamente in un'implementazione. È quindi possibile, ad esempio, che addAll(c) non riesca (generando un'eccezione) dopo aver aggiunto solo alcuni degli elementi in c.

A BlockingQueue non <><> supporta intrinsecamente alcun tipo di " close" o " shutdown" operazione per indicare che non verranno aggiunti altri elementi. Le esigenze e l'utilizzo di tali funzionalità tendono a dipendere dall'implementazione. Ad esempio, una tattica comune è che i produttori inseriscano oggetti speciali <em>end-of-stream</em> o <em>poison</em> , interpretati di conseguenza quando vengono acquisiti dai consumer.

Esempio di utilizzo, basato su un tipico scenario producer-consumer. Si noti che un BlockingQueue oggetto può essere usato in modo sicuro con più producer e più consumer.

{@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();
              }
            }}

Effetti di coerenza della memoria: come con altre raccolte simultanee, le azioni in un thread prima di inserire un oggetto in un'azione BlockingQueue<i-before></i> successive all'accesso o alla rimozione di tale elemento da BlockingQueue in un altro thread.

Questa interfaccia è un membro di Java Collections Framework.

Aggiunto nella versione 1.5.

Documentazione java per java.util.concurrent.BlockingQueue.

Le parti di questa pagina sono modifiche basate sul lavoro creato e condiviso dal progetto Open Source Android e usato in base ai termini descritti nella licenza Creative Commons 2.5 Attribuzione.

Proprietà

Handle

Ottiene il valore JNI dell'oggetto Android sottostante.

(Ereditato da IJavaObject)
IsEmpty

Restituisce se l'oggetto Collection non contiene elementi.

(Ereditato da ICollection)
JniIdentityHashCode

Restituisce il valore di java.lang.System.identityHashCode() per l'istanza di cui è stato eseguito il wrapping.

(Ereditato da IJavaPeerable)
JniManagedPeerState

Stato del peer gestito.

(Ereditato da IJavaPeerable)
JniPeerMembers

Supporto per l'accesso ai membri e la chiamata.

(Ereditato da IJavaPeerable)
PeerReference

Restituisce un JniObjectReference oggetto dell'istanza dell'oggetto Java di cui è stato eseguito il wrapping.

(Ereditato da IJavaPeerable)

Metodi

Add(Object)

Inserisce l'elemento specificato in questa coda se è possibile farlo immediatamente senza violare le restrizioni di capacità, restituendo true in caso di esito positivo e generando un'eccezione IllegalStateException se non è disponibile spazio.

AddAll(ICollection)

Aggiunge tutti gli elementi della raccolta specificata a questa raccolta (operazione facoltativa).

(Ereditato da ICollection)
Clear()

Rimuove tutti gli elementi da questa raccolta (operazione facoltativa).

(Ereditato da ICollection)
Contains(Object)

Restituisce true se la coda contiene l'elemento specificato.

ContainsAll(ICollection)

Restituisce true se l'insieme contiene tutti gli elementi dell'insieme specificato.

(Ereditato da ICollection)
Disposed()

Chiamato quando l'istanza è stata eliminata.

(Ereditato da IJavaPeerable)
DisposeUnlessReferenced()

Se non sono presenti riferimenti in sospeso a questa istanza, chiama Dispose(); in caso contrario, non esegue alcuna operazione.

(Ereditato da IJavaPeerable)
DrainTo(ICollection)

Rimuove tutti gli elementi disponibili dalla coda e li aggiunge alla raccolta specificata.

DrainTo(ICollection, Int32)

Rimuove al massimo il numero specificato di elementi disponibili da questa coda e li aggiunge alla raccolta specificata.

Element()

Recupera, ma non rimuove, l'intestazione di questa coda.

(Ereditato da IQueue)
Equals(Object)

Confronta l'oggetto specificato con questa raccolta per verificare l'uguaglianza.

(Ereditato da ICollection)
Finalized()

Chiamato quando l'istanza è stata finalizzata.

(Ereditato da IJavaPeerable)
ForEach(IConsumer)

Esegue l'azione specificata per ogni elemento di Iterable finché tutti gli elementi non sono stati elaborati o l'azione genera un'eccezione.

(Ereditato da IIterable)
GetHashCode()

Restituisce il valore del codice hash per questa raccolta.

(Ereditato da ICollection)
Iterator()

Restituisce un iteratore sugli elementi di questa raccolta.

(Ereditato da ICollection)
Offer(Object)

Inserisce l'elemento specificato in questa coda se è possibile farlo immediatamente senza violare le restrizioni di capacità, restituendo true in caso di esito positivo e false se non è disponibile spazio.

Offer(Object, Int64, TimeUnit)

Inserisce l'elemento specificato in questa coda, in attesa fino al tempo di attesa specificato, se necessario, affinché lo spazio diventi disponibile.

Peek()

Recupera, ma non rimuove, l'intestazione della coda o restituisce null se la coda è vuota.

(Ereditato da IQueue)
Poll()

Recupera e rimuove l'intestazione della coda oppure restituisce null se la coda è vuota.

(Ereditato da IQueue)
Poll(Int64, TimeUnit)

Recupera e rimuove l'intestazione di questa coda, in attesa fino al tempo di attesa specificato, se necessario, affinché un elemento diventi disponibile.

Put(Object)

Inserisce l'elemento specificato in questa coda, in attesa, se necessario, che lo spazio diventi disponibile.

RemainingCapacity()

Restituisce il numero di elementi aggiuntivi che questa coda può idealmente accettare (in assenza di vincoli di memoria o risorse) senza bloccare o Integer.MAX_VALUE se non esiste alcun limite intrinseco.

Remove()

Recupera e rimuove l'intestazione della coda.

(Ereditato da IQueue)
Remove(Object)

Rimuove una singola istanza dell'elemento specificato dalla coda, se presente.

RemoveAll(ICollection)

Rimuove tutti gli elementi di questa raccolta contenuti anche nella raccolta specificata (operazione facoltativa).

(Ereditato da ICollection)
RemoveIf(IPredicate)

Rimuove tutti gli elementi di questa raccolta che soddisfano il predicato specificato.

(Ereditato da ICollection)
RetainAll(ICollection)

Mantiene solo gli elementi di questa raccolta contenuti nella raccolta specificata (operazione facoltativa).

(Ereditato da ICollection)
SetJniIdentityHashCode(Int32)

Impostare il valore restituito da JniIdentityHashCode.

(Ereditato da IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

Oggetto Queue che supporta anche operazioni che attendono che la coda diventi non vuota durante il recupero di un elemento e attenda che lo spazio diventi disponibile nella coda durante l'archiviazione di un elemento.

(Ereditato da IJavaPeerable)
SetPeerReference(JniObjectReference)

Impostare il valore restituito da PeerReference.

(Ereditato da IJavaPeerable)
Size()

Restituisce il numero di elementi in questa raccolta.

(Ereditato da ICollection)
Spliterator()

Crea un Spliterator oggetto sugli elementi descritti da questo Iterableoggetto .

(Ereditato da IIterable)
Take()

Recupera e rimuove l'intestazione di questa coda, in attesa, se necessario, fino a quando non diventa disponibile un elemento.

ToArray()

Restituisce una matrice contenente tutti gli elementi dell'insieme.

(Ereditato da ICollection)
ToArray(IIntFunction)

Restituisce una matrice contenente tutti gli elementi di questa raccolta, utilizzando la funzione fornita generator per allocare la matrice restituita.

(Ereditato da ICollection)
ToArray(Object[])

Restituisce una matrice contenente tutti gli elementi dell'insieme; Il tipo di runtime della matrice restituita è quello della matrice specificata.

(Ereditato da ICollection)
UnregisterFromRuntime()

Annullare la registrazione di questa istanza in modo che il runtime non lo restituisca dalle chiamate future Java.Interop.JniRuntime+JniValueManager.PeekValue .

(Ereditato da IJavaPeerable)

Implementazioni dell'interfaccia esplicita

IIterable.Spliterator()

Crea un Spliterator oggetto sugli elementi di questa raccolta.

(Ereditato da ICollection)

Metodi di estensione

JavaCast<TResult>(IJavaObject)

Esegue una conversione del tipo di tipo controllato dal runtime Android.

JavaCast<TResult>(IJavaObject)

Oggetto Queue che supporta anche operazioni che attendono che la coda diventi non vuota durante il recupero di un elemento e attenda che lo spazio diventi disponibile nella coda durante l'archiviazione di un elemento.

GetJniTypeName(IJavaPeerable)

Oggetto Queue che supporta anche operazioni che attendono che la coda diventi non vuota durante il recupero di un elemento e attenda che lo spazio diventi disponibile nella coda durante l'archiviazione di un elemento.

OfferAsync(IBlockingQueue, Object)

Oggetto Queue che supporta anche operazioni che attendono che la coda diventi non vuota durante il recupero di un elemento e attenda che lo spazio diventi disponibile nella coda durante l'archiviazione di un elemento.

OfferAsync(IBlockingQueue, Object, Int64, TimeUnit)

Oggetto Queue che supporta anche operazioni che attendono che la coda diventi non vuota durante il recupero di un elemento e attenda che lo spazio diventi disponibile nella coda durante l'archiviazione di un elemento.

PollAsync(IBlockingQueue, Int64, TimeUnit)

Oggetto Queue che supporta anche operazioni che attendono che la coda diventi non vuota durante il recupero di un elemento e attenda che lo spazio diventi disponibile nella coda durante l'archiviazione di un elemento.

PutAsync(IBlockingQueue, Object)

Oggetto Queue che supporta anche operazioni che attendono che la coda diventi non vuota durante il recupero di un elemento e attenda che lo spazio diventi disponibile nella coda durante l'archiviazione di un elemento.

TakeAsync(IBlockingQueue)

Oggetto Queue che supporta anche operazioni che attendono che la coda diventi non vuota durante il recupero di un elemento e attenda che lo spazio diventi disponibile nella coda durante l'archiviazione di un elemento.

ToEnumerable(IIterable)

Oggetto Queue che supporta anche operazioni che attendono che la coda diventi non vuota durante il recupero di un elemento e attenda che lo spazio diventi disponibile nella coda durante l'archiviazione di un elemento.

ToEnumerable<T>(IIterable)

Oggetto Queue che supporta anche operazioni che attendono che la coda diventi non vuota durante il recupero di un elemento e attenda che lo spazio diventi disponibile nella coda durante l'archiviazione di un elemento.

Si applica a