IBlockingQueue Schnittstelle
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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, add
put
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
, retainAll
containsAll
und 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 |
JniIdentityHashCode |
Gibt den Wert |
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 |
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 |
ContainsAll(ICollection) |
Gibt zurück |
Disposed() |
Wird aufgerufen, wenn die Instanz verworfen wurde. (Geerbt von IJavaPeerable) |
DisposeUnlessReferenced() |
Wenn keine offenen Verweise auf diese Instanz vorhanden sind, wird nichts aufgerufen |
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 |
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 |
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 |
Poll() |
Ruft den Kopf dieser Warteschlange ab und entfernt sie oder gibt zurück |
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 |
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 |
SetJniManagedPeerState(JniManagedPeerStates) |
Eine |
SetPeerReference(JniObjectReference) |
Legen Sie den von |
Size() |
Gibt die Anzahl der Elemente in dieser Auflistung zurück. (Geerbt von ICollection) |
Spliterator() |
Erstellt eine |
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 |
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 |
Erweiterungsmethoden
JavaCast<TResult>(IJavaObject) |
Führt eine android-laufzeitgecheckte Typkonvertierung aus. |
JavaCast<TResult>(IJavaObject) |
Eine |
GetJniTypeName(IJavaPeerable) |
Eine |
OfferAsync(IBlockingQueue, Object) |
Eine |
OfferAsync(IBlockingQueue, Object, Int64, TimeUnit) |
Eine |
PollAsync(IBlockingQueue, Int64, TimeUnit) |
Eine |
PutAsync(IBlockingQueue, Object) |
Eine |
TakeAsync(IBlockingQueue) |
Eine |
ToEnumerable(IIterable) |
Eine |
ToEnumerable<T>(IIterable) |
Eine |