Selector Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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à
- 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 |
Handle |
Handle per l'istanza di Android sottostante. (Ereditato da Object) |
IsOpen |
Indica se questo selettore è aperto. |
JniIdentityHashCode |
Multiplexor di |
JniPeerMembers |
Multiplexor di |
PeerReference |
Multiplexor di |
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 |
Dispose(Boolean) |
Multiplexor di |
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 |
ToString() |
Restituisce una rappresentazione di stringa dell'oggetto. (Ereditato da Object) |
UnregisterFromRuntime() |
Multiplexor di |
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 |
IJavaPeerable.DisposeUnlessReferenced() |
Multiplexor di |
IJavaPeerable.Finalized() |
Multiplexor di |
IJavaPeerable.JniManagedPeerState |
Multiplexor di |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
Multiplexor di |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Multiplexor di |
IJavaPeerable.SetPeerReference(JniObjectReference) |
Multiplexor di |
Metodi di estensione
JavaCast<TResult>(IJavaObject) |
Esegue una conversione del tipo di tipo controllato dal runtime Android. |
JavaCast<TResult>(IJavaObject) |
Multiplexor di |
GetJniTypeName(IJavaPeerable) |
Multiplexor di |