Condividi tramite


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

Multiplexor di SelectableChannel oggetti.

È possibile creare un selettore richiamando il #open open metodo di questa classe, che userà l'impostazione predefinita java.nio.channels.spi.SelectorProvider selector provider del sistema per creare un nuovo selettore. È anche possibile creare un selettore 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 relativo #close close metodo.

"ks">

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

<ul>

<li>

Il set di chiavi contiene le chiavi che rappresentano le registrazioni del canale corrente 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 il canale di ogni chiave sia stato rilevato per essere pronto per almeno una delle operazioni identificate nell'interesse della chiave impostata durante un'operazione di selezione precedente che aggiunge chiavi o aggiorna chiavi 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 annullate è il set di chiavi annullate, ma i cui canali non sono ancora stati annullati. Questo set non è accessibile direttamente. Il set di chiavi annullate è 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 relativo SelectionKey#cancel cancel metodo. Se si annulla una chiave, il canale verrà annullato durante l'operazione di selezione successiva, al momento in cui la chiave verrà rimossa da tutti i set di chiavi del selettore.

"sks">

Le chiavi vengono aggiunte al set di chiavi selezionato dalle 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. È possibile rimuovere tutte le chiavi dal set di chiavi selezionate richiamando il metodo del java.util.Set#clear() clear set. È possibile che le chiavi non vengano aggiunte direttamente al set di chiavi selezionato.

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

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

<olo>

<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 per l'operazione 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 selezionato.

</li>

</olo>

<operazioni di selezione h3>che aggiungono al set< di chiavi selezionato/h3>

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

<olo>

<li>

Ogni chiave nel set di chiavi annullate 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>

Viene eseguita una query sul sistema operativo sottostante per ottenere un aggiornamento in base all'idoneità di ogni canale rimanente per eseguire una delle operazioni identificate dall'interesse della chiave impostata al momento in cui è iniziata l'operazione di selezione. Per un canale pronto per almeno un'operazione di questo tipo, viene eseguita una delle due azioni seguenti:

<olo>

<li>

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

</li>

<li>

In caso contrario, la chiave del canale si trova già nel set di chiavi selezionato, quindi il set di operazioni pronto viene modificato per identificare le nuove operazioni per cui viene segnalato che il canale è pronto. Tutte le informazioni di idoneità registrate in precedenza nel set pronto vengono mantenute; in altre parole, il set pronto restituito dal sistema sottostante viene unito in modo bit per bit al set pronto corrente della chiave.

</li>

</olo>

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 selezionate né i set di operazioni pronte per le chiavi.

<li>

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

</li>

</olo>

Indipendentemente dal fatto che un'operazione di selezione blocchi di attesa che 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:

<olo>

<li>

Ogni chiave nel set di chiavi annullate 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>

Viene eseguita una query sul sistema operativo sottostante per ottenere un aggiornamento in base all'idoneità di ogni canale rimanente per eseguire una delle operazioni identificate dall'interesse della chiave impostata al 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 è 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 idoneità registrate in precedenza nel set pronto vengono eliminate prima di richiamare l'azione.

In alternativa, quando 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 relativo set di operazioni pronte 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 elaborate come nel passaggio (1).

</li>

</olo>

<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, se necessario, 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 nel selettore e nel 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 che aggiungono al set o con i 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 tale thread potrebbe modificare direttamente il set, l'accesso deve essere controllato dalla sincronizzazione nel set stesso. Gli iteratori restituiti dai metodi del set sono veloci da errori: se il set viene modificato dopo la creazione dell'iteratore, in qualsiasi modo tranne richiamando il metodo dell'iteratore, java.util.Iterator#remove() remove verrà generato un oggetto java.util.ConcurrentModificationException .java.util.Set#iterator() iterator

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 progetto Open Source Android e usato in base ai termini descritti nella licenza Creative Commons 2.5 Attribuzione.

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 per l'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 su un oggetto quando Garbage Collection determina che non sono presenti altri riferimenti all'oggetto .

(Ereditato da Object)
Keys()

Restituisce il set di chiavi del selettore.

Notify()

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

(Ereditato da Object)
NotifyAll()

Riattiva tutti i thread in attesa del monitor 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, Int64)

Seleziona ed esegue un'azione sulle 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(Int64)

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

SelectedKeys()

Restituisce il set di chiavi selezionato 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 di stringa dell'oggetto.

(Ereditato da Object)
UnregisterFromRuntime()

Multiplexor di SelectableChannel oggetti.

(Ereditato da Object)
Wait()

Fa sì che il thread corrente attenda finché non viene risvegliato, in genere ricevendo <>una notifica</em> o <em>interrotto</em>.

(Ereditato da Object)
Wait(Int64, Int32)

Fa sì che il thread corrente attenda finché non viene risvegliato, in genere ricevendo>< una notifica</em> o <em>interrotto</em> o fino a quando non è trascorsa una determinata quantità di tempo reale.

(Ereditato da Object)
Wait(Int64)

Fa sì che il thread corrente attenda finché non viene risvegliato, in genere ricevendo>< una notifica</em> o <em>interrotto</em> o fino a quando non è trascorsa una determinata quantità di tempo reale.

(Ereditato da Object)
Wakeup()

Determina la restituzione immediata della prima operazione di selezione non ancora restituita.

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 del tipo di tipo controllato dal runtime Android.

JavaCast<TResult>(IJavaObject)

Multiplexor di SelectableChannel oggetti.

GetJniTypeName(IJavaPeerable)

Multiplexor di SelectableChannel oggetti.

Si applica a