Freigeben über


IBlockingQueue Schnittstelle

Definition

Eine Queue , die zusätzlich Vorgänge unterstützt, die warten, bis die Warteschlange beim Abrufen eines Elements nicht leer wird, und warten, bis Speicherplatz in der Warteschlange beim Speichern eines Elements verfügbar ist.

[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
Abgeleitet
Attribute
Implementiert

Hinweise

Eine Queue , die zusätzlich Vorgänge unterstützt, die warten, bis die Warteschlange beim Abrufen eines Elements nicht leer wird, und warten, bis Speicherplatz in der Warteschlange beim Speichern eines Elements verfügbar ist.

BlockingQueue Methoden kommen in vier Formen, mit unterschiedlichen Methoden zum Behandeln von Vorgängen, die nicht sofort erfüllt werden können, aber irgendwann in Der Zukunft zufrieden sein können: Eine Ausnahme löst eine Ausnahme aus, die zweite gibt einen speziellen Wert (entweder null oder false, je nach Vorgang) zurück, der dritte blockiert den aktuellen Thread unbegrenzt, bis der Vorgang erfolgreich sein kann, und die vierten Blöcke nur für eine bestimmte maximale Zeitgrenze, bevor sie aufgeben. Diese Methoden sind in der folgenden Tabelle zusammengefasst:

<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 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)/td><td>#offer(Object) offer(e)</<>td td<#put(Object) put(e)>/td td><><#offer(Object, long, TimeUnit) offer(e, time, unit)/td<>/tr tr<<>>th scope="row" style="text-align:left">Remove</th<>td#remove() remove()<>/td<>td/td/td>#poll() poll()<><td>#take() take()</td td><#poll(long, TimeUnit) poll(time, unit)/td></td<>/tr tr><><th scope="row" style="text-align:left">Examine</th<>td><#element() element()/td td<>td><#peek() peek()/td><td style="font-style: italic">not applicable</td td><style="font-style: italic">not applicable</td<>/tr></table>

A BlockingQueue akzeptiert null keine Elemente. Implementierungen werden NullPointerException auf Versuche, addput oder offer ein null. A null wird als Sentinelwert verwendet, um fehler bei Vorgängen poll anzuzeigen.

Eine BlockingQueue kann kapazitätsgebunden sein. Zu einem bestimmten Zeitpunkt kann es eine remainingCapacity Darüber hinaus haben, über die keine zusätzlichen Elemente ohne Blockierung verfügen put können. Eine BlockingQueue ohne systeminterne Kapazitätsbeschränkungen meldet immer eine verbleibende Kapazität von Integer.MAX_VALUE.

BlockingQueue Implementierungen sind in erster Linie für Produzenten-Consumer-Warteschlangen vorgesehen, unterstützen aber zusätzlich die Collection Schnittstelle. So ist es beispielsweise möglich, ein beliebiges Element mithilfe remove(x)einer Warteschlange aus einer Warteschlange zu entfernen. Solche Vorgänge werden jedoch im Allgemeinen <>nicht</em> sehr effizient ausgeführt und sind nur für gelegentliche Verwendung vorgesehen, z. B. wenn eine in die Warteschlange eingereihte Nachricht abgebrochen wird.

BlockingQueue Implementierungen sind threadsicher. Alle Queuing-Methoden erreichen ihre Auswirkungen atomisch mit internen Sperren oder anderen Formen der Parallelitätssteuerung. Die Em-Massen<-/Em-Sammlungsvorgänge>addAll, retainAllcontainsAllund removeAll sind <em>>nicht>< notwendigerweise atomisch ausgeführt, es sei denn, <dies ist in einer Implementierung anders angegeben. Es ist also möglich, addAll(c) z. B. fehlzuschlagen (Auslösen einer Ausnahme), nachdem nur einige der Elemente hinzugefügt wurden c.

A BlockingQueue unterstützt <>nicht</em> systemintern jede Art von " close" oder " Herunterfahren" operation to indicate that no more items will be added. Die Bedürfnisse und die Verwendung solcher Features sind in der Regel implementierungsabhängig. Eine häufige Taktik ist beispielsweise, dass Produzenten spezielle <em-end-of-stream<>/em>- oder <em>gift</em-Objekte> einfügen, die entsprechend interpretiert werden, wenn sie von Verbrauchern eingenommen werden.

Verwendungsbeispiel basierend auf einem typischen Szenario für Produzenten und Verbraucher. Beachten Sie, dass eine BlockingQueue sichere Verwendung mit mehreren Produzenten und mehreren Verbrauchern möglich ist.

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

Auswirkungen auf die Speicherkonsistenz: Wie bei anderen gleichzeitigen Auflistungen werden Aktionen in einem Thread vor dem Platzieren eines Objekts in eine i-happen-before/i-Aktionen> ausgeführt, die auf den Zugriff oder das Entfernen dieses Elements aus dem BlockingQueue in einem BlockingQueue<anderen Thread folgen.><

Diese Schnittstelle ist ein Mitglied des Java Collections Framework.

Hinzugefügt in 1.5.

Java-Dokumentation für java.util.concurrent.BlockingQueue.

Teile dieser Seite sind Änderungen auf der Grundlage von Arbeiten, die vom Android Open Source-Projekt erstellt und freigegeben werden und gemäß den in der Creative Commons 2.5 Attribution License beschriebenen Begriffen verwendet werden.

Eigenschaften

Handle

Ruft den JNI-Wert des zugrunde liegenden Android-Objekts ab.

(Geerbt von IJavaObject)
IsEmpty

Gibt zurück, wenn dies Collection keine Elemente enthält.

(Geerbt von ICollection)
JniIdentityHashCode

Gibt den Wert java.lang.System.identityHashCode() für die umbrochene Instanz zurück.

(Geerbt von IJavaPeerable)
JniManagedPeerState

Status des verwalteten Peers.

(Geerbt von IJavaPeerable)
JniPeerMembers

Mitgliedszugriff und Aufrufunterstützung.

(Geerbt von IJavaPeerable)
PeerReference

Gibt eine JniObjectReference der umbrochenen Java-Objektinstanz zurück.

(Geerbt von IJavaPeerable)

Methoden

Add(Object)

Fügt das angegebene Element in diese Warteschlange ein, wenn es möglich ist, dies sofort zu tun, ohne Kapazitätsbeschränkungen zu verletzen, bei Erfolg zurückzukehren und einen IllegalStateException Wenn zurzeit kein Speicherplatz verfügbar ist, auszulösentrue.

AddAll(ICollection)

Fügt alle Elemente in der angegebenen Auflistung dieser Auflistung hinzu (optionaler Vorgang).

(Geerbt von ICollection)
Clear()

Entfernt alle Elemente aus dieser Auflistung (optionaler Vorgang).

(Geerbt von ICollection)
Contains(Object)

Gibt zurück true , wenn diese Warteschlange das angegebene Element enthält.

ContainsAll(ICollection)

Gibt zurück true , wenn diese Auflistung alle Elemente in der angegebenen Auflistung enthält.

(Geerbt von ICollection)
Disposed()

Wird aufgerufen, wenn die Instanz verworfen wurde.

(Geerbt von IJavaPeerable)
DisposeUnlessReferenced()

Wenn keine offenen Verweise auf diese Instanz vorhanden sind, wird nichts aufgerufen Dispose(). Andernfalls wird nichts ausgeführt.

(Geerbt von IJavaPeerable)
DrainTo(ICollection)

Entfernt alle verfügbaren Elemente aus dieser Warteschlange und fügt sie der angegebenen Auflistung hinzu.

DrainTo(ICollection, Int32)

Entfernt höchstens die angegebene Anzahl verfügbarer Elemente aus dieser Warteschlange und fügt sie der angegebenen Auflistung hinzu.

Element()

Ruft den Kopf dieser Warteschlange ab, entfernt sie jedoch nicht.

(Geerbt von IQueue)
Equals(Object)

Vergleicht das angegebene Objekt mit dieser Auflistung für die Gleichheit.

(Geerbt von ICollection)
Finalized()

Wird aufgerufen, wenn die Instanz abgeschlossen wurde.

(Geerbt von IJavaPeerable)
ForEach(IConsumer)

Führt die angegebene Aktion für jedes Element der Iterable Elemente aus, bis alle Elemente verarbeitet wurden, oder die Aktion löst eine Ausnahme aus.

(Geerbt von IIterable)
GetHashCode()

Gibt den Hashcodewert für diese Auflistung zurück.

(Geerbt von ICollection)
Iterator()

Gibt einen Iterator für die Elemente in dieser Auflistung zurück.

(Geerbt von ICollection)
Offer(Object)

Fügt das angegebene Element in diese Warteschlange ein, wenn es möglich ist, dies sofort zu tun, ohne Kapazitätsbeschränkungen zu verletzen, nach Erfolg zurückzukehren true und false wenn zurzeit kein Speicherplatz verfügbar ist.

Offer(Object, Int64, TimeUnit)

Fügt das angegebene Element in diese Warteschlange ein, und wartet bei Bedarf auf die angegebene Wartezeit, um verfügbar zu werden.

Peek()

Ruft den Kopf dieser Warteschlange ab, entfernt sie jedoch nicht oder gibt zurück null , wenn diese Warteschlange leer ist.

(Geerbt von IQueue)
Poll()

Ruft den Kopf dieser Warteschlange ab und entfernt sie oder gibt zurück null , wenn diese Warteschlange leer ist.

(Geerbt von IQueue)
Poll(Int64, TimeUnit)

Ruft den Kopf dieser Warteschlange ab und entfernt sie, wartet bei Bedarf auf die angegebene Wartezeit, damit ein Element verfügbar wird.

Put(Object)

Fügt das angegebene Element in diese Warteschlange ein, und wartet, falls erforderlich, dass Speicherplatz verfügbar ist.

RemainingCapacity()

Gibt die Anzahl zusätzlicher Elemente zurück, die diese Warteschlange idealerweise akzeptieren kann (in Abwesenheit von Arbeitsspeicher- oder Ressourceneinschränkungen), ohne zu blockieren, oder Integer.MAX_VALUE wenn keine systeminterne Beschränkung vorhanden ist.

Remove()

Ruft den Kopf dieser Warteschlange ab und entfernt sie.

(Geerbt von IQueue)
Remove(Object)

Entfernt eine einzelne Instanz des angegebenen Elements aus dieser Warteschlange, wenn es vorhanden ist.

RemoveAll(ICollection)

Entfernt alle Elemente dieser Auflistung, die auch in der angegebenen Auflistung enthalten sind (optionaler Vorgang).

(Geerbt von ICollection)
RemoveIf(IPredicate)

Entfernt alle Elemente dieser Auflistung, die das angegebene Prädikat erfüllen.

(Geerbt von ICollection)
RetainAll(ICollection)

Behält nur die Elemente in dieser Auflistung bei, die in der angegebenen Auflistung enthalten sind (optionaler Vorgang).

(Geerbt von ICollection)
SetJniIdentityHashCode(Int32)

Legen Sie den von JniIdentityHashCode.

(Geerbt von IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

Eine Queue , die zusätzlich Vorgänge unterstützt, die warten, bis die Warteschlange beim Abrufen eines Elements nicht leer wird, und warten, bis Speicherplatz in der Warteschlange beim Speichern eines Elements verfügbar ist.

(Geerbt von IJavaPeerable)
SetPeerReference(JniObjectReference)

Legen Sie den von PeerReference.

(Geerbt von IJavaPeerable)
Size()

Gibt die Anzahl der Elemente in dieser Auflistung zurück.

(Geerbt von ICollection)
Spliterator()

Erstellt eine Spliterator über den hier Iterablebeschriebenen Elemente.

(Geerbt von IIterable)
Take()

Ruft den Kopf dieser Warteschlange ab und entfernt sie, und wartet bei Bedarf, bis ein Element verfügbar ist.

ToArray()

Gibt ein Array zurück, das alle Elemente in dieser Auflistung enthält.

(Geerbt von ICollection)
ToArray(IIntFunction)

Gibt ein Array zurück, das alle Elemente in dieser Auflistung enthält, wobei die bereitgestellte generator Funktion verwendet wird, um das zurückgegebene Array zuzuweisen.

(Geerbt von ICollection)
ToArray(Object[])

Gibt ein Array zurück, das alle Elemente in dieser Auflistung enthält; Der Laufzeittyp des zurückgegebenen Arrays ist die des angegebenen Arrays.

(Geerbt von ICollection)
UnregisterFromRuntime()

Heben Sie die Registrierung dieser Instanz auf, damit die Laufzeit sie nicht aus zukünftigen Java.Interop.JniRuntime+JniValueManager.PeekValue Aufrufen zurückgibt.

(Geerbt von IJavaPeerable)

Explizite Schnittstellenimplementierungen

IIterable.Spliterator()

Erstellt eine Spliterator Übergabe der Elemente in dieser Auflistung.

(Geerbt von ICollection)

Erweiterungsmethoden

JavaCast<TResult>(IJavaObject)

Führt eine android-laufzeitgecheckte Typkonvertierung aus.

JavaCast<TResult>(IJavaObject)

Eine Queue , die zusätzlich Vorgänge unterstützt, die warten, bis die Warteschlange beim Abrufen eines Elements nicht leer wird, und warten, bis Speicherplatz in der Warteschlange beim Speichern eines Elements verfügbar ist.

GetJniTypeName(IJavaPeerable)

Eine Queue , die zusätzlich Vorgänge unterstützt, die warten, bis die Warteschlange beim Abrufen eines Elements nicht leer wird, und warten, bis Speicherplatz in der Warteschlange beim Speichern eines Elements verfügbar ist.

OfferAsync(IBlockingQueue, Object)

Eine Queue , die zusätzlich Vorgänge unterstützt, die warten, bis die Warteschlange beim Abrufen eines Elements nicht leer wird, und warten, bis Speicherplatz in der Warteschlange beim Speichern eines Elements verfügbar ist.

OfferAsync(IBlockingQueue, Object, Int64, TimeUnit)

Eine Queue , die zusätzlich Vorgänge unterstützt, die warten, bis die Warteschlange beim Abrufen eines Elements nicht leer wird, und warten, bis Speicherplatz in der Warteschlange beim Speichern eines Elements verfügbar ist.

PollAsync(IBlockingQueue, Int64, TimeUnit)

Eine Queue , die zusätzlich Vorgänge unterstützt, die warten, bis die Warteschlange beim Abrufen eines Elements nicht leer wird, und warten, bis Speicherplatz in der Warteschlange beim Speichern eines Elements verfügbar ist.

PutAsync(IBlockingQueue, Object)

Eine Queue , die zusätzlich Vorgänge unterstützt, die warten, bis die Warteschlange beim Abrufen eines Elements nicht leer wird, und warten, bis Speicherplatz in der Warteschlange beim Speichern eines Elements verfügbar ist.

TakeAsync(IBlockingQueue)

Eine Queue , die zusätzlich Vorgänge unterstützt, die warten, bis die Warteschlange beim Abrufen eines Elements nicht leer wird, und warten, bis Speicherplatz in der Warteschlange beim Speichern eines Elements verfügbar ist.

ToEnumerable(IIterable)

Eine Queue , die zusätzlich Vorgänge unterstützt, die warten, bis die Warteschlange beim Abrufen eines Elements nicht leer wird, und warten, bis Speicherplatz in der Warteschlange beim Speichern eines Elements verfügbar ist.

ToEnumerable<T>(IIterable)

Eine Queue , die zusätzlich Vorgänge unterstützt, die warten, bis die Warteschlange beim Abrufen eines Elements nicht leer wird, und warten, bis Speicherplatz in der Warteschlange beim Speichern eines Elements verfügbar ist.

Gilt für: