Selector Klasse
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.
Ein Multiplexor von SelectableChannel
Objekten.
[Android.Runtime.Register("java/nio/channels/Selector", DoNotGenerateAcw=true)]
public abstract class Selector : Java.Lang.Object, IDisposable, Java.Interop.IJavaPeerable, Java.IO.ICloseable
[<Android.Runtime.Register("java/nio/channels/Selector", DoNotGenerateAcw=true)>]
type Selector = class
inherit Object
interface ICloseable
interface IJavaObject
interface IDisposable
interface IJavaPeerable
- Vererbung
- Abgeleitet
- Attribute
- Implementiert
Hinweise
Ein Multiplexor von SelectableChannel
Objekten.
Eine Selektor kann durch Aufrufen der #open open
Methode dieser Klasse erstellt werden, die den Standardwert java.nio.channels.spi.SelectorProvider selector provider
des Systems zum Erstellen eines neuen Selektors verwendet. Eine Selektor kann auch durch Aufrufen der java.nio.channels.spi.SelectorProvider#openSelector openSelector
Methode eines benutzerdefinierten Selektoranbieters erstellt werden. Eine Selektor bleibt geöffnet, bis sie über die #close close
Methode geschlossen wird.
"ks">
Die Registrierung eines auswählbaren Kanals mit einer Auswahl wird durch ein SelectionKey
Objekt dargestellt. Eine Auswahl verwaltet drei Sätze von Auswahltasten:
<ul>
<Li>
Der Schlüsselsatz enthält die Schlüssel, die die aktuellen Kanalregistrierungen dieser Auswahl darstellen. Dieser Satz wird von der #keys() keys
Methode zurückgegeben.
</Li>
<Li>
Der ausgewählte Schlüsselsatz ist der Satz von Schlüsseln, sodass der Kanal jedes Schlüssels für mindestens einen der im Interesse des Schlüssels festgelegten Vorgänge während eines vorherigen Auswahlvorgangs, der Schlüssel hinzufügt oder Schlüssel in der Gruppe aktualisiert, bereit zu sein. Dieser Satz wird von der #selectedKeys() selectedKeys
Methode zurückgegeben. Der ausgewählte Schlüsselsatz ist immer eine Teilmenge des Schlüsselsatzes.
</Li>
<Li>
Der Satz abgebrochener Schlüssel ist der Satz von Schlüsseln, die abgebrochen wurden, deren Kanäle jedoch noch nicht registriert wurden. Auf diesen Satz kann nicht direkt zugegriffen werden. Der Satz "Abgebrochener Schlüssel" ist immer eine Teilmenge des Schlüsselsatzes.
</Li>
</ul>
Alle drei Sätze sind in einer neu erstellten Auswahl leer.
Ein Schlüssel wird dem Schlüsselsatz eines Selektors als Nebeneffekt hinzugefügt, um einen Kanal über die Methode des Kanals SelectableChannel#register(Selector,int) register
zu registrieren. Abgebrochene Schlüssel werden während der Auswahlvorgänge aus dem Schlüsselsatz entfernt. Der Schlüsselsatz selbst kann nicht direkt geändert werden.
Ein Schlüssel wird dem gekündigten Schlüsselsatz des Selektors hinzugefügt, wenn er abgebrochen wird, unabhängig davon, ob er seinen Kanal schließt oder seine Methode aufruft SelectionKey#cancel cancel
. Durch das Abbrechen eines Schlüssels wird der Kanal während des nächsten Auswahlvorgangs deregistert, zu dem der Schlüssel aus allen Tastensätzen des Selektors entfernt wird.
"sks">
Schlüssel werden dem ausgewählten Schlüssel hinzugefügt, der durch Auswahlvorgänge festgelegt wird. Ein Schlüssel kann direkt aus dem ausgewählten Schlüsselsatz entfernt werden, indem er die Methode des Satzes java.util.Set#remove(java.lang.Object) remove
aufruft oder die java.util.Iterator#remove() remove
Methode eines java.util.Iterator iterator
abgerufenen Satzes aufruft. Alle Schlüssel können aus dem ausgewählten Schlüsselsatz entfernt werden, indem sie die Methode des java.util.Set#clear() clear
Satzes aufrufen. Schlüssel werden möglicherweise nicht direkt zum ausgewählten Schlüsselsatz hinzugefügt.
"selop"><h2>Selection</h2>
Ein Auswahlvorgang fragt das zugrunde liegende Betriebssystem nach einer Aktualisierung ab, um die Bereitschaft jedes registrierten Kanals für die Durchführung der vorgänge auszuführen, die durch den Interessensatz des Schlüssels identifiziert wurden. Es gibt zwei Formen des Auswahlvorgangs:
<ol>
<Li>
Mit #select()
den Methoden #select(long)
werden #selectNow()
die Schlüssel der Kanäle hinzugefügt, die bereit sind, einen Vorgang zum ausgewählten Schlüsselsatz auszuführen, oder die bereits im ausgewählten Schlüsselsatz verfügbaren Schlüsselsätze zu aktualisieren.
</Li>
<Li>
Die #select(Consumer)
Methoden , #select(Consumer, long)
und #selectNow(Consumer)
die Methoden führen eine Aktion für den Schlüssel jedes Kanals aus, der zum Ausführen eines Vorgangs bereit ist. Diese Methoden werden dem ausgewählten Schlüsselsatz nicht hinzugefügt.
</Li>
</ol>
<h3>Auswahlvorgänge, die dem ausgewählten Schlüsselsatz</h3 hinzugefügt werden>
Während jedes Auswahlvorgangs können Schlüssel zum ausgewählten Schlüsselsatz eines Selektors hinzugefügt und daraus entfernt werden und möglicherweise aus den zugehörigen Schlüssel- und Löschtastensätzen entfernt werden. Die Auswahl erfolgt durch die #select()
Methoden und #select(long)
Methoden und #selectNow()
umfasst drei Schritte:
<ol>
<Li>
Jeder Schlüssel im Satz "Abgebrochener Schlüssel" wird aus jedem Schlüsselsatz entfernt, dessen Mitglied es ist, und dessen Kanal wird deregistert. Dieser Schritt lässt den abgebrochenen Schlüsselsatz leer.
</Li>
<Li>
Das zugrunde liegende Betriebssystem wird für eine Aktualisierung abgefragt, um die Bereitschaft jedes verbleibenden Kanals durchzuführen, um alle Vorgänge auszuführen, die durch den Interessensatz ihres Schlüssels identifiziert wurden, sobald der Auswahlvorgang begonnen hat. Für einen Kanal, der für mindestens einen solchen Vorgang bereit ist, wird eine der folgenden beiden Aktionen ausgeführt:
<ol>
<Li>
Wenn sich der Schlüssel des Kanals noch nicht im ausgewählten Schlüsselsatz befindet, wird er zu diesem Satz hinzugefügt, und sein Bereitbetriebssatz wird geändert, um genau die Vorgänge zu identifizieren, für die der Kanal jetzt bereit ist. Alle bereitschaftsinformationen, die zuvor im fertigen Satz aufgezeichnet wurden, werden verworfen.
</Li>
<Li>
Andernfalls befindet sich der Schlüssel des Kanals bereits im ausgewählten Schlüsselsatz, sodass der zugehörigen Ready-Operation-Satz geändert wird, um alle neuen Vorgänge zu identifizieren, für die der Kanal als bereit gemeldet wird. Alle bereitschaftsinformationen, die zuvor im fertigen Satz aufgezeichnet wurden, bleiben erhalten; Mit anderen Worten, der vom zugrunde liegenden System zurückgegebene Ready-Set ist bitweise nicht mit dem aktuellen Ready-Set des Schlüssels zusammengeführt.
</Li>
</ol>
Wenn alle Schlüssel, die am Anfang dieses Schritts festgelegt sind, leer sind, werden weder der ausgewählte Schlüsselsatz noch die einsatzbereiten Sätze der Schlüssel aktualisiert.
<Li>
Wenn dem abgebrochenen Schlüsselsatz Schlüssel hinzugefügt wurden, während Schritt (2) ausgeführt wurde, werden sie wie in Schritt (1) verarbeitet.
</Li>
</ol>
Gibt an, ob ein Auswahlvorgang blockiert wird, bis ein oder mehrere Kanäle bereit sind, und wenn ja, wie lange dies der einzige wesentliche Unterschied zwischen den drei Auswahlmethoden ist.
<h3>Auswahlvorgänge, die eine Aktion für ausgewählte Tasten</h3 ausführen>
Während jedes Auswahlvorgangs können Schlüssel aus dem Schlüssel der Auswahl, dem ausgewählten Schlüssel und den Sätzen für abgebrochene Tasten entfernt werden. Die Auswahl erfolgt durch die #select(Consumer)
Methoden und #select(Consumer,long)
Methoden und #selectNow(Consumer)
umfasst drei Schritte:
<ol>
<Li>
Jeder Schlüssel im Satz "Abgebrochener Schlüssel" wird aus jedem Schlüsselsatz entfernt, dessen Mitglied es ist, und dessen Kanal wird deregistert. Dieser Schritt lässt den abgebrochenen Schlüsselsatz leer.
</Li>
<Li>
Das zugrunde liegende Betriebssystem wird für eine Aktualisierung abgefragt, um die Bereitschaft jedes verbleibenden Kanals durchzuführen, um alle Vorgänge auszuführen, die durch den Interessensatz ihres Schlüssels identifiziert wurden, sobald der Auswahlvorgang begonnen hat.
Für einen Kanal, der für mindestens einen solchen Vorgang bereit ist, wird der Ready-Operation-Satz des Kanalschlüssels festgelegt, um genau die Vorgänge zu identifizieren, für die der Kanal bereit ist, und die für die select
Methode angegebene Aktion wird aufgerufen, um den Schlüssel des Kanals zu nutzen. Alle bereitschaftsinformationen, die zuvor im bereiten Satz aufgezeichnet wurden, werden vor dem Aufrufen der Aktion verworfen.
Wenn ein Kanal für mehrere Vorgänge bereit ist, kann die Aktion auch mehrmals aufgerufen werden, wobei der Schlüssel und der Ready-Operation-Satz des Kanals auf eine Teilmenge der Vorgänge geändert wurde, für die der Kanal bereit ist. Wenn die Aktion mehrmals für denselben Schlüssel aufgerufen wird, enthält der zugehörigen Ready-Operation-Satz niemals Vorgangsbits, die in der Gruppe bei vorherigen Aufrufen der Aktion im selben Auswahlvorgang enthalten waren.
</Li>
<Li>
Wenn dem abgebrochenen Schlüsselsatz Schlüssel hinzugefügt wurden, während Schritt (2) ausgeführt wurde, werden sie wie in Schritt (1) verarbeitet.
</Li>
</ol>
<h2>Parallelität</h2>
Eine Auswahl und ihr Schlüsselsatz sind sicher für die Verwendung durch mehrere gleichzeitige Threads. Der festgelegte und abgebrochene Schlüsselsatz ist jedoch nicht.
Die Auswahlvorgänge werden für die Auswahl selbst, auf dem ausgewählten Schlüsselsatz, in dieser Reihenfolge synchronisiert. Sie werden auch für den gekündigten Schlüssel synchronisiert, der während der vorstehenden Schritte (1) und (3) festgelegt ist.
Änderungen, die an den Interessensätzen der Auswahlschlüssel vorgenommen wurden, während ein Auswahlvorgang ausgeführt wird, haben keine Auswirkungen auf diesen Vorgang; sie werden vom nächsten Auswahlvorgang angezeigt.
Schlüssel können abgebrochen werden, und Kanäle können jederzeit geschlossen werden. Daher bedeutet das Vorhandensein eines Schlüssels in einem oder mehreren Schlüsselsätzen eines Selektors nicht, dass der Schlüssel gültig ist oder der Kanal geöffnet ist. Anwendungscode sollte darauf achten, diese Bedingungen nach Bedarf zu synchronisieren und zu überprüfen, wenn es möglich ist, dass ein anderer Thread einen Schlüssel abbricht oder einen Kanal schließt.
Ein in einem Auswahlvorgang blockierter Thread kann von einem anderen Thread auf eine von drei Arten unterbrochen werden:
<ul>
<Li>
Durch Aufrufen der Selektormethode #wakeup wakeup
</Li>
<Li>
Durch Aufrufen der Selektormethode #close close
oder
</Li>
<Li>
Durch Aufrufen der Methode des blockierten Threads java.lang.Thread#interrupt() interrupt
, in diesem Fall wird der Interruptstatus festgelegt, und die Methode des Selektors #wakeup wakeup
wird aufgerufen.
</Li>
</ul>
Die #close close
Methode wird auf dem Selektor synchronisiert und der ausgewählte Schlüssel in der gleichen Reihenfolge wie bei einem Auswahlvorgang festgelegt.
"ksc">
Der Schlüsselsatz einer Auswahl ist sicher für die Verwendung durch mehrere gleichzeitige Threads. Abrufvorgänge aus dem Schlüsselsatz blockieren nicht im Allgemeinen und überlappen sich daher mit neuen Registrierungen, die dem Satz hinzugefügt werden, oder mit den Abbruchschritten von Auswahlvorgängen, die Schlüssel aus dem Satz entfernen. Iteratoren und Spliteratoren geben Elemente zurück, die den Zustand des Satzes an einem bestimmten Punkt an oder seit der Erstellung des Iterators/Spliterators widerspiegeln. Sie werfen java.util.ConcurrentModificationException ConcurrentModificationException
nicht .
"sksc">
Der ausgewählte Schlüsselsatz einer Auswahl ist im Allgemeinen nicht sicher für die Verwendung durch mehrere gleichzeitige Threads. Wenn ein solcher Thread den Satz direkt ändern kann, sollte der Zugriff durch die Synchronisierung des Satzes selbst gesteuert werden. Die iteratoren, die von den Methoden des Satzes java.util.Set#iterator() iterator
zurückgegeben werden, sind fail-fast: Wenn der Satz nach dem Erstellen des Iterators geändert wird, mit Ausnahme der Aufruf der eigenen java.util.Iterator#remove() remove
Methode des Iterators, wird eine java.util.ConcurrentModificationException
ausgelöst.
In 1.4 hinzugefügt.
Java-Dokumentation für java.nio.channels.Selector
.
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.
Konstruktoren
Selector() |
Initialisiert eine neue Instanz dieser Klasse. |
Selector(IntPtr, JniHandleOwnership) |
Ein Konstruktor, der beim Erstellen verwalteter Darstellungen von JNI-Objekten verwendet wird; wird von der Laufzeit aufgerufen. |
Eigenschaften
Class |
Gibt die Laufzeitklasse dieses Werts |
Handle |
Das Handle für die zugrunde liegende Android-Instanz. (Geerbt von Object) |
IsOpen |
Gibt an, ob diese Auswahl geöffnet ist. |
JniIdentityHashCode |
Ein Multiplexor von |
JniPeerMembers |
Ein Multiplexor von |
PeerReference |
Ein Multiplexor von |
ThresholdClass |
Diese API unterstützt die Mono für Android-Infrastruktur und ist nicht für die direkte Verwendung aus Ihrem Code vorgesehen. |
ThresholdType |
Diese API unterstützt die Mono für Android-Infrastruktur und ist nicht für die direkte Verwendung aus Ihrem Code vorgesehen. |
Methoden
Clone() |
Erstellt und gibt eine Kopie dieses Objekts zurück. (Geerbt von Object) |
Close() |
Schließt diese Auswahl. |
Dispose() |
Ein Multiplexor von |
Dispose(Boolean) |
Ein Multiplexor von |
Equals(Object) |
Gibt an, ob ein anderes Objekt "gleich" diesem Objekt ist. (Geerbt von Object) |
GetHashCode() |
Gibt einen Hashcodewert für das Objekt zurück. (Geerbt von Object) |
JavaFinalize() |
Wird vom Garbage Collector für ein Objekt aufgerufen, wenn die Garbage Collection bestimmt, dass keine weiteren Verweise auf das Objekt vorhanden sind. (Geerbt von Object) |
Keys() |
Gibt den Schlüsselsatz dieses Selektors zurück. |
Notify() |
Aktiviert einen einzelnen Thread, der auf dem Monitor dieses Objekts wartet. (Geerbt von Object) |
NotifyAll() |
Aktiviert alle Threads, die auf dem Monitor dieses Objekts warten. (Geerbt von Object) |
Open() |
Öffnet eine Auswahl. |
Provider() |
Gibt den Anbieter zurück, der diesen Kanal erstellt hat. |
Select() |
Wählt eine Reihe von Schlüsseln aus, deren entsprechende Kanäle für E/A-Vorgänge bereit sind. |
Select(IConsumer, Int64) |
Wählt eine Aktion für die Schlüssel aus, deren entsprechende Kanäle für E/A-Vorgänge bereit sind, und führt sie aus. |
Select(IConsumer) |
Wählt eine Aktion für die Schlüssel aus, deren entsprechende Kanäle für E/A-Vorgänge bereit sind, und führt sie aus. |
Select(Int64) |
Wählt eine Reihe von Schlüsseln aus, deren entsprechende Kanäle für E/A-Vorgänge bereit sind. |
SelectedKeys() |
Gibt den ausgewählten Schlüsselsatz dieses Selektors zurück. |
SelectNow() |
Wählt eine Reihe von Schlüsseln aus, deren entsprechende Kanäle für E/A-Vorgänge bereit sind. |
SelectNow(IConsumer) |
Wählt eine Aktion für die Schlüssel aus, deren entsprechende Kanäle für E/A-Vorgänge bereit sind, und führt sie aus. |
SetHandle(IntPtr, JniHandleOwnership) |
Legt die Handle-Eigenschaft fest. (Geerbt von Object) |
ToArray<T>() |
Ein Multiplexor von |
ToString() |
Gibt eine Zeichenfolgendarstellung des Objekts zurück. (Geerbt von Object) |
UnregisterFromRuntime() |
Ein Multiplexor von |
Wait() |
Bewirkt, dass der aktuelle Thread wartet, bis er wach ist, in der Regel durch em benachrichtigt/em> oder <em>unterbrochen</em>.<>< (Geerbt von Object) |
Wait(Int64, Int32) |
Bewirkt, dass der aktuelle Thread wartet, bis er wach ist, in der Regel durch <em>benachrichtigt</em> oder <em>unterbrochen</em> oder bis eine bestimmte Menge an Echtzeit verstrichen ist. (Geerbt von Object) |
Wait(Int64) |
Bewirkt, dass der aktuelle Thread wartet, bis er wach ist, in der Regel durch <em>benachrichtigt</em> oder <em>unterbrochen</em> oder bis eine bestimmte Menge an Echtzeit verstrichen ist. (Geerbt von Object) |
Wakeup() |
Bewirkt, dass der erste Auswahlvorgang, der noch nicht zurückgegeben wurde, sofort zurückgegeben wurde. |
Explizite Schnittstellenimplementierungen
IJavaPeerable.Disposed() |
Ein Multiplexor von |
IJavaPeerable.DisposeUnlessReferenced() |
Ein Multiplexor von |
IJavaPeerable.Finalized() |
Ein Multiplexor von |
IJavaPeerable.JniManagedPeerState |
Ein Multiplexor von |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
Ein Multiplexor von |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Ein Multiplexor von |
IJavaPeerable.SetPeerReference(JniObjectReference) |
Ein Multiplexor von |
Erweiterungsmethoden
JavaCast<TResult>(IJavaObject) |
Führt eine android-laufzeitgecheckte Typkonvertierung aus. |
JavaCast<TResult>(IJavaObject) |
Ein Multiplexor von |
GetJniTypeName(IJavaPeerable) |
Ein Multiplexor von |