Share via


Selector Classe

Definizione

Multiplexor di SelectableChannel oggetti.

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

Commenti

Un multiplexor di SelectableChannel oggetti.

Un selettore può essere creato richiamando il metodo di questa classe, che userà il #open open valore predefinito java.nio.channels.spi.SelectorProvider selector provider del sistema per creare un nuovo selettore. Un selettore può anche essere creato richiamando il java.nio.channels.spi.SelectorProvider#openSelector openSelector metodo di un provider di selettore personalizzato. Un selettore rimane aperto fino a quando non viene chiuso tramite il #close close relativo metodo.

"ks">

La registrazione di un canale selezionabile con un selettore è rappresentata da un SelectionKey oggetto . Un selettore gestisce tre set di chiavi di selezione:

<ul>

<li>

Il set di chiavi contiene le chiavi che rappresentano le registrazioni correnti del canale di questo selettore. Questo set viene restituito dal #keys() keys metodo .

</li>

<li>

Il set di chiavi selezionato è il set di chiavi in modo che ogni canale di ogni chiave sia stato rilevato per essere pronto per almeno una delle operazioni identificate nel set di interesse della chiave durante un'operazione di selezione precedente che aggiunge chiavi o chiavi di aggiornamento nel set. Questo set viene restituito dal #selectedKeys() selectedKeys metodo . Il set di chiavi selezionato è sempre un subset del set di chiavi.

</li>

<li>

Il set di chiavi annullato è il set di chiavi annullate, ma i cui canali non sono ancora stati annullati. Questo set non è accessibile direttamente. Il set di chiavi annullato è sempre un subset del set di chiavi.

</li>

</ul>

Tutti e tre i set sono vuoti in un selettore appena creato.

Una chiave viene aggiunta al set di chiavi di un selettore come effetto collaterale della registrazione di un canale tramite il metodo del SelectableChannel#register(Selector,int) register canale. Le chiavi annullate vengono rimosse dal set di chiavi durante le operazioni di selezione. Il set di chiavi stesso non è modificabile direttamente.

Una chiave viene aggiunta al set di chiavi annullate del selettore quando viene annullato, se chiudendo il canale o richiamando il SelectionKey#cancel cancel metodo. L'annullamento di una chiave causerà la deregiregistrazione del canale durante l'operazione di selezione successiva, in cui la chiave verrà rimossa da tutti i set di chiavi del selettore.

"sks">

Le chiavi vengono aggiunte al set di chiavi selezionate in base alle operazioni di selezione. Una chiave può essere rimossa direttamente dal set di chiavi selezionate richiamando il metodo del java.util.Set#remove(java.lang.Object) remove set o richiamando il java.util.Iterator#remove() remove metodo di un java.util.Iterator iterator oggetto ottenuto dal set. Tutte le chiavi possono essere rimosse dal set di chiavi selezionate richiamando il metodo del java.util.Set#clear() clear set. Le chiavi potrebbero non essere aggiunte direttamente al set di chiavi selezionate.

"selop"><h2 Selection</h2>>

Un'operazione di selezione esegue una query sul sistema operativo sottostante per un aggiornamento in base alla conformità di ogni canale registrato per eseguire una delle operazioni identificate dal set di interessi della chiave. Esistono due forme di operazione di selezione:

<Ol>

<li>

I #select()metodi , #select(long)e #selectNow() aggiungono le chiavi dei canali pronti per eseguire un'operazione al set di chiavi selezionato oppure aggiornare il set di chiavi pronto già nel set di chiavi selezionato.

</li>

<li>

I #select(Consumer)metodi , #select(Consumer, long)e #selectNow(Consumer) e eseguono un'azione sulla chiave di ogni canale pronto per eseguire un'operazione. Questi metodi non vengono aggiunti al set di chiavi selezionate.

</li>

</Ol>

<h3>Operazioni di selezione che aggiungono al set< di chiavi selezionate/h3>

Durante ogni operazione di selezione, le chiavi possono essere aggiunte a e rimosse dal set di chiavi selezionate di un selettore e possono essere rimosse dalla chiave e dai set di chiavi annullati. La selezione viene eseguita dai #select()metodi , #select(long)e #selectNow() e prevede tre passaggi:

<Ol>

<li>

Ogni chiave nel set di chiavi annullata viene rimossa da ogni set di chiavi di cui è membro e il relativo canale viene deregisterato. Questo passaggio lascia vuoto il set di chiavi annullato.

</li>

<li>

Il sistema operativo sottostante viene sottoposto a query per un aggiornamento in base alla conformità di ogni canale rimanente per eseguire una delle operazioni identificate dall'interesse della chiave impostata al momento dell'avvio dell'operazione di selezione. Per un canale pronto per almeno un'operazione di questo tipo, viene eseguita una delle due azioni seguenti:

<Ol>

<li>

Se la chiave del canale non è già presente nel set di chiavi selezionato, viene aggiunta a tale set e il set di operazioni pronto viene modificato per identificare esattamente le operazioni per cui il canale viene segnalato come pronto. Tutte le informazioni di idoneità registrate in precedenza nel set pronto vengono rimosse.

</li>

<li>

In caso contrario, la chiave del canale è già presente nel set di chiavi selezionate, quindi il set di operazioni pronto viene modificato per identificare eventuali nuove operazioni per cui il canale viene segnalato come pronto. Tutte le informazioni sull'idoneità registrate in precedenza nel set pronto vengono mantenute; in altre parole, il set pronto restituito dal sistema sottostante viene suddiviso in modo bit per bit nel set pronto corrente della chiave.

</li>

</Ol>

Se tutte le chiavi nella chiave impostata all'inizio di questo passaggio hanno set di interessi vuoti, non verranno aggiornati né il set di chiavi selezionato né i set di operazioni pronti per le chiavi.

<li>

Se sono state aggiunte chiavi al set di chiavi annullate mentre il passaggio (2) era in corso, vengono elaborati come nel passaggio (1).

</li>

</Ol>

Indipendentemente dal fatto che un'operazione di selezione blocchi di attesa affinché uno o più canali diventino pronti e, se per quanto tempo, è l'unica differenza essenziale tra i tre metodi di selezione.

<h3>Operazioni di selezione che eseguono un'azione sulle chiavi< selezionate/h3>

Durante ogni operazione di selezione, le chiavi possono essere rimosse dalla chiave del selettore, dalla chiave selezionata e dai set di chiavi annullati. La selezione viene eseguita dai #select(Consumer)metodi , #select(Consumer,long)e #selectNow(Consumer) e prevede tre passaggi:

<Ol>

<li>

Ogni chiave nel set di chiavi annullata viene rimossa da ogni set di chiavi di cui è membro e il relativo canale viene annullata la registrazione. Questo passaggio lascia vuoto il set di chiavi annullate.

</li>

<li>

Il sistema operativo sottostante viene sottoposto a query per un aggiornamento in base all'idoneità di ogni canale rimanente per eseguire una qualsiasi delle operazioni identificate dal set di interesse della chiave nel momento in cui è iniziata l'operazione di selezione.

Per un canale pronto per almeno un'operazione di questo tipo, il set di operazioni pronto della chiave del canale viene impostato per identificare esattamente le operazioni per cui il canale è pronto e l'azione specificata per il select metodo viene richiamata per utilizzare la chiave del canale. Tutte le informazioni di conformità registrate in precedenza nel set pronto vengono eliminate prima di richiamare l'azione.

In alternativa, in cui un canale è pronto per più di un'operazione, l'azione può essere richiamata più volte con la chiave del canale e il set di operazioni pronto modificato in un subset delle operazioni per cui il canale è pronto. Quando l'azione viene richiamata più volte per la stessa chiave, il set di operazioni pronto non contiene mai bit di operazione contenuti nel set nelle chiamate precedenti all'azione nella stessa operazione di selezione.

</li>

<li>

Se sono state aggiunte chiavi al set di chiavi annullate mentre il passaggio (2) era in corso, vengono elaborati come nel passaggio (1).

</li>

</Ol>

<h2>Concorrenza</h2>

Un selettore e il relativo set di chiavi sono sicuri per l'uso da parte di più thread simultanei. Il set di chiavi selezionato e il set di chiavi annullate, tuttavia, non sono.

Le operazioni di selezione vengono sincronizzate sul selettore stesso, nel set di chiavi selezionato, in tale ordine. Vengono sincronizzati anche sul set di chiavi annullate durante i passaggi (1) e (3) precedenti.

Le modifiche apportate ai set di interesse delle chiavi di un selettore mentre è in corso un'operazione di selezione non hanno alcun effetto su tale operazione; verranno visualizzati dall'operazione di selezione successiva.

Le chiavi possono essere annullate e i canali possono essere chiusi in qualsiasi momento. Di conseguenza, la presenza di una chiave in uno o più set di chiavi di un selettore non implica che la chiave sia valida o che il relativo canale sia aperto. Il codice dell'applicazione deve prestare attenzione a sincronizzare e controllare queste condizioni in base alle esigenze se è possibile che un altro thread annulli una chiave o chiuda un canale.

Un thread bloccato in un'operazione di selezione può essere interrotto da un altro thread in uno dei tre modi seguenti:

<ul>

<li>

Richiamando il metodo del #wakeup wakeup selettore,

</li>

<li>

Richiamando il metodo del #close close selettore o

</li>

<li>

Richiamando il metodo del java.lang.Thread#interrupt() interrupt thread bloccato, nel qual caso verrà impostato lo stato di interruzione e verrà richiamato il metodo del #wakeup wakeup selettore.

</li>

</ul>

Il #close close metodo viene sincronizzato sul selettore e sul relativo set di chiavi selezionate nello stesso ordine di un'operazione di selezione.

"ksc">

Il set di chiavi di un selettore è sicuro per l'uso da parte di più thread simultanei. Le operazioni di recupero dal set di chiavi non vengono in genere bloccate e pertanto possono sovrapporsi a nuove registrazioni aggiunte al set o ai passaggi di annullamento delle operazioni di selezione che rimuovono le chiavi dal set. Gli iteratori e gli spliterator restituiscono elementi che riflettono lo stato del set a un certo punto o dopo la creazione dell'iteratore/spliterator. Non generano java.util.ConcurrentModificationException ConcurrentModificationException.

"sksc">

Il set di chiavi selezionato di un selettore non è, in generale, sicuro per l'uso da parte di più thread simultanei. Se un thread di questo tipo potrebbe modificare direttamente il set, l'accesso deve essere controllato dalla sincronizzazione nel set stesso. Gli iteratori restituiti dai metodi del java.util.Set#iterator() iterator set sono con esito negativo: se il set viene modificato dopo la creazione dell'iteratore, in qualsiasi modo, ad eccezione del richiamo del metodo dell'iteratore java.util.Iterator#remove() remove , verrà generata un'eccezione java.util.ConcurrentModificationException .

Aggiunta nella versione 1.4.

Documentazione java per java.nio.channels.Selector.

Le parti di questa pagina sono modifiche basate sul lavoro creato e condiviso dal Android e usato in base ai termini descritti in 2.5 Attribution License Creative Commons 2.5 Attribution License.

Costruttori

Selector()

Inizializza una nuova istanza della classe.

Selector(IntPtr, JniHandleOwnership)

Costruttore usato durante la creazione di rappresentazioni gestite di oggetti JNI; chiamato dal runtime.

Proprietà

Class

Restituisce la classe di runtime di questo Objectoggetto .

(Ereditato da Object)
Handle

Handle all'istanza di Android sottostante.

(Ereditato da Object)
IsOpen

Indica se questo selettore è aperto.

JniIdentityHashCode

Multiplexor di SelectableChannel oggetti.

(Ereditato da Object)
JniPeerMembers

Multiplexor di SelectableChannel oggetti.

PeerReference

Multiplexor di SelectableChannel oggetti.

(Ereditato da Object)
ThresholdClass

Questa API supporta l'infrastruttura Mono per Android e non deve essere usata direttamente dal codice.

ThresholdType

Questa API supporta l'infrastruttura Mono per Android e non deve essere usata direttamente dal codice.

Metodi

Clone()

Crea e restituisce una copia di questo oggetto.

(Ereditato da Object)
Close()

Chiude questo selettore.

Dispose()

Multiplexor di SelectableChannel oggetti.

(Ereditato da Object)
Dispose(Boolean)

Multiplexor di SelectableChannel oggetti.

(Ereditato da Object)
Equals(Object)

Indica se un altro oggetto è "uguale a" questo.

(Ereditato da Object)
GetHashCode()

Restituisce un valore del codice hash per l'oggetto.

(Ereditato da Object)
JavaFinalize()

Chiamato dal Garbage Collector in un oggetto quando Garbage Collection determina che non sono presenti più riferimenti all'oggetto.

(Ereditato da Object)
Keys()

Restituisce il set di chiavi del selettore.

Notify()

Riattiva un singolo thread in attesa del monitoraggio dell'oggetto.

(Ereditato da Object)
NotifyAll()

Riattiva tutti i thread in attesa del monitoraggio dell'oggetto.

(Ereditato da Object)
Open()

Apre un selettore.

Provider()

Restituisce il provider che ha creato questo canale.

Select()

Seleziona un set di chiavi i cui canali corrispondenti sono pronti per le operazioni di I/O.

Select(IConsumer)

Seleziona ed esegue un'azione sulle chiavi i cui canali corrispondenti sono pronti per le operazioni di I/O.

Select(IConsumer, Int64)

Seleziona ed esegue un'azione sulle chiavi i cui canali corrispondenti sono pronti per le operazioni di I/O.

Select(Int64)

Seleziona un set di chiavi i cui canali corrispondenti sono pronti per le operazioni di I/O.

SelectedKeys()

Restituisce il set di chiavi selezionate del selettore.

SelectNow()

Seleziona un set di chiavi i cui canali corrispondenti sono pronti per le operazioni di I/O.

SelectNow(IConsumer)

Seleziona ed esegue un'azione sulle chiavi i cui canali corrispondenti sono pronti per le operazioni di I/O.

SetHandle(IntPtr, JniHandleOwnership)

Imposta la proprietà Handle.

(Ereditato da Object)
ToArray<T>()

Multiplexor di SelectableChannel oggetti.

(Ereditato da Object)
ToString()

Restituisce una rappresentazione in formato stringa dell'oggetto.

(Ereditato da Object)
UnregisterFromRuntime()

Multiplexor di SelectableChannel oggetti.

(Ereditato da Object)
Wait()

Causa l'attesa del thread corrente fino a quando non viene svegliata, in genere eseguendo>una notifica</em o <em interrotto</>em>>.<

(Ereditato da Object)
Wait(Int64)

Causa l'attesa del thread corrente fino a quando non viene svegliata, in genere <>eseguendo una notifica</em o <em interrotto/>>em>o fino a quando non è trascorsa< una determinata quantità di tempo reale.

(Ereditato da Object)
Wait(Int64, Int32)

Causa l'attesa del thread corrente fino a quando non viene svegliata, in genere <>eseguendo una notifica</em o <em interrotto/>>em>o fino a quando non è trascorsa< una determinata quantità di tempo reale.

(Ereditato da Object)
Wakeup()

Causa la prima operazione di selezione che non è ancora stata restituita immediatamente.

Implementazioni dell'interfaccia esplicita

IJavaPeerable.Disposed()

Multiplexor di SelectableChannel oggetti.

(Ereditato da Object)
IJavaPeerable.DisposeUnlessReferenced()

Multiplexor di SelectableChannel oggetti.

(Ereditato da Object)
IJavaPeerable.Finalized()

Multiplexor di SelectableChannel oggetti.

(Ereditato da Object)
IJavaPeerable.JniManagedPeerState

Multiplexor di SelectableChannel oggetti.

(Ereditato da Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Multiplexor di SelectableChannel oggetti.

(Ereditato da Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Multiplexor di SelectableChannel oggetti.

(Ereditato da Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

Multiplexor di SelectableChannel oggetti.

(Ereditato da Object)

Metodi di estensione

JavaCast<TResult>(IJavaObject)

Esegue una conversione dei tipi controllati dal runtime Android.

JavaCast<TResult>(IJavaObject)

Multiplexor di SelectableChannel oggetti.

GetJniTypeName(IJavaPeerable)

Multiplexor di SelectableChannel oggetti.

Si applica a