IBlockingQueue Interfaccia
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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.
BlockingQueue
I 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 add
o put
offer
.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 addAll
di raccolta bulk</em> em>, containsAll
retainAll
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 |
JniIdentityHashCode |
Restituisce il valore di |
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 |
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 |
ContainsAll(ICollection) |
Restituisce |
Disposed() |
Chiamato quando l'istanza è stata eliminata. (Ereditato da IJavaPeerable) |
DisposeUnlessReferenced() |
Se non sono presenti riferimenti in sospeso a questa istanza, chiama |
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 |
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 |
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 |
Poll() |
Recupera e rimuove l'intestazione della coda oppure restituisce |
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 |
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 |
SetJniManagedPeerState(JniManagedPeerStates) |
Oggetto |
SetPeerReference(JniObjectReference) |
Impostare il valore restituito da |
Size() |
Restituisce il numero di elementi in questa raccolta. (Ereditato da ICollection) |
Spliterator() |
Crea un |
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 |
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 |
Metodi di estensione
JavaCast<TResult>(IJavaObject) |
Esegue una conversione del tipo di tipo controllato dal runtime Android. |
JavaCast<TResult>(IJavaObject) |
Oggetto |
GetJniTypeName(IJavaPeerable) |
Oggetto |
OfferAsync(IBlockingQueue, Object) |
Oggetto |
OfferAsync(IBlockingQueue, Object, Int64, TimeUnit) |
Oggetto |
PollAsync(IBlockingQueue, Int64, TimeUnit) |
Oggetto |
PutAsync(IBlockingQueue, Object) |
Oggetto |
TakeAsync(IBlockingQueue) |
Oggetto |
ToEnumerable(IIterable) |
Oggetto |
ToEnumerable<T>(IIterable) |
Oggetto |