Compartir a través de


Selector Clase

Definición

Multiplexor de SelectableChannel objetos.

[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
Herencia
Selector
Derivado
Atributos
Implementaciones

Comentarios

Multiplexor de SelectableChannel objetos.

Se puede crear un selector invocando el #open open método de esta clase, que usará el valor predeterminado java.nio.channels.spi.SelectorProvider selector provider del sistema para crear un nuevo selector. También se puede crear un selector invocando el java.nio.channels.spi.SelectorProvider#openSelector openSelector método de un proveedor de selector personalizado. Un selector permanece abierto hasta que se cierra a través de su #close close método .

"ks">

El registro de un canal seleccionable con un selector se representa mediante un SelectionKey objeto . Un selector mantiene tres conjuntos de claves de selección:

<ul>

<Li>

El conjunto de claves contiene las claves que representan los registros de canal actuales de este selector. El método devuelve #keys() keys este conjunto.

</Li>

<Li>

El conjunto de claves seleccionado es el conjunto de claves, de modo que se detectó que el canal de cada clave estaba listo para al menos una de las operaciones identificadas en el interés de la clave establecida durante una operación de selección anterior que agrega claves o actualiza claves en el conjunto. El método devuelve #selectedKeys() selectedKeys este conjunto. El conjunto de claves seleccionado siempre es un subconjunto del conjunto de claves.

</Li>

<Li>

El conjunto de claves canceladas es el conjunto de claves que se han cancelado, pero cuyos canales aún no se han registrado. Este conjunto no es accesible directamente. El conjunto de claves cancelada siempre es un subconjunto del conjunto de claves.

</Li>

</ul>

Los tres conjuntos están vacíos en un selector recién creado.

Se agrega una clave al conjunto de claves de un selector como efecto secundario del registro de un canal a través del método del SelectableChannel#register(Selector,int) register canal. Las claves canceladas se quitan del conjunto de claves durante las operaciones de selección. El propio conjunto de claves no se puede modificar directamente.

Se agrega una clave al conjunto de claves canceladas de su selector cuando se cancela, ya sea cerrando su canal o invocando su SelectionKey#cancel cancel método. La cancelación de una clave hará que su canal se anule el registro durante la siguiente operación de selección, en cuyo momento se quitará la clave de todos los conjuntos de claves del selector.

"sks">

Las claves se agregan al conjunto de claves seleccionado mediante operaciones de selección. Una clave se puede quitar directamente del conjunto de claves seleccionada invocando el método del java.util.Set#remove(java.lang.Object) remove conjunto o invocando el java.util.Iterator#remove() remove método de un java.util.Iterator iterator objeto obtenido del conjunto. Todas las claves se pueden quitar del conjunto de claves seleccionado invocando el método del java.util.Set#clear() clear conjunto. Es posible que las claves no se agreguen directamente al conjunto de claves seleccionado.

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

Una operación de selección consulta el sistema operativo subyacente para una actualización en cuanto a la preparación de cada canal registrado para realizar cualquiera de las operaciones identificadas por el interés de su clave. Hay dos formas de operación de selección:

<Ol>

<Li>

Los #select()métodos , #select(long)y #selectNow() agregan las claves de los canales listos para realizar una operación en el conjunto de claves seleccionado o actualizan el conjunto de claves listos ya en el conjunto de claves seleccionado.

</Li>

<Li>

Los #select(Consumer)métodos , #select(Consumer, long)y #selectNow(Consumer) realizan una acción en la clave de cada canal que está listo para realizar una operación. Estos métodos no se agregan al conjunto de claves seleccionado.

</Li>

</Ol>

<h3>Operaciones de selección que se agregan al conjunto< de claves seleccionado/h3>

Durante cada operación de selección, las claves se pueden agregar y quitar del conjunto de claves seleccionado de un selector y se pueden quitar de sus conjuntos de claves canceladas y claves canceladas. La selección se realiza mediante los #select()métodos , #select(long)y #selectNow() , e implica tres pasos:

<Ol>

<Li>

Cada clave del conjunto de claves cancelada se quita de cada conjunto de claves del que es miembro y se anula el registro de su canal. Este paso deja vacío el conjunto de claves cancelada.

</Li>

<Li>

El sistema operativo subyacente se consulta para obtener una actualización sobre la preparación de cada canal restante para realizar cualquiera de las operaciones identificadas por el interés de su clave establecida en el momento en que se inició la operación de selección. Para un canal que esté listo para al menos una operación de este tipo, se realiza una de las dos acciones siguientes:

<Ol>

<Li>

Si la clave del canal aún no está en el conjunto de claves seleccionada, se agrega a ese conjunto y su conjunto de operaciones listos se modifica para identificar exactamente las operaciones para las que el canal ahora se notifica que está listo. Se descarta cualquier información de preparación registrada anteriormente en el conjunto listo.

</Li>

<Li>

De lo contrario, la clave del canal ya está en el conjunto de claves seleccionada, por lo que su conjunto de operaciones preparadas se modifica para identificar las nuevas operaciones para las que se notifica que el canal está listo. Se conserva cualquier información de preparación registrada anteriormente en el conjunto listo; es decir, el conjunto listo devuelto por el sistema subyacente se desasocia bit a bit en el conjunto listo actual de la clave.

</Li>

</Ol>

Si todas las claves del conjunto de claves al principio de este paso tienen conjuntos de intereses vacíos, no se actualizará el conjunto de claves seleccionado ni ninguno de los conjuntos de operaciones listos de las claves.

<Li>

Si se agregaron claves al conjunto de claves canceladas mientras el paso (2) estaba en curso, se procesan como en el paso (1).

</Li>

</Ol>

Si una operación de selección bloquea o no para esperar a que uno o varios canales estén listos y, si es así durante cuánto tiempo, es la única diferencia esencial entre los tres métodos de selección.

<h3>Operaciones de selección que realizan una acción en las claves</h3 seleccionadas>

Durante cada operación de selección, las claves se pueden quitar de la clave del selector, la clave seleccionada y los conjuntos de claves canceladas. La selección se realiza mediante los #select(Consumer)métodos , #select(Consumer,long)y #selectNow(Consumer) , e implica tres pasos:

<Ol>

<Li>

Cada clave del conjunto de claves cancelada se quita de cada conjunto de claves del que es miembro y se anula el registro de su canal. Este paso deja vacío el conjunto de claves cancelada.

</Li>

<Li>

El sistema operativo subyacente se consulta para obtener una actualización sobre la preparación de cada canal restante para realizar cualquiera de las operaciones identificadas por el interés de su clave establecida en el momento en que se inició la operación de selección.

Para un canal que esté listo para al menos una operación de este tipo, el conjunto de operaciones listos de la clave del canal se establece para identificar exactamente las operaciones para las que el canal está listo y la acción especificada para el select método se invoca para consumir la clave del canal. Cualquier información de preparación registrada anteriormente en el conjunto listo se descarta antes de invocar la acción.

Como alternativa, cuando un canal está listo para más de una operación, la acción se puede invocar más de una vez con la clave del canal y el conjunto de operaciones listos modificados en un subconjunto de las operaciones para las que el canal está listo. Cuando la acción se invoca más de una vez para la misma clave, su conjunto de operaciones listas nunca contiene bits de operación contenidos en el conjunto en llamadas anteriores a la acción en la misma operación de selección.

</Li>

<Li>

Si se agregaron claves al conjunto de claves canceladas mientras el paso (2) estaba en curso, se procesan como en el paso (1).

</Li>

</Ol>

<h2>Simultaneidad</h2>

Un selector y su conjunto de claves son seguros para su uso por varios subprocesos simultáneos. Sin embargo, su conjunto de claves seleccionada y el conjunto de claves canceladas no lo son.

Las operaciones de selección se sincronizan en el propio selector, en el conjunto de claves seleccionado, en ese orden. También se sincronizan en el conjunto de claves canceladas durante los pasos (1) y (3) anteriores.

Los cambios realizados en los conjuntos de intereses de las claves de un selector mientras una operación de selección está en curso no tienen ningún efecto en esa operación; serán vistos por la siguiente operación de selección.

Las claves se pueden cancelar y los canales pueden cerrarse en cualquier momento. Por lo tanto, la presencia de una clave en uno o varios conjuntos de claves de un selector no implica que la clave sea válida o que su canal esté abierto. El código de la aplicación debe tener cuidado de sincronizar y comprobar estas condiciones según sea necesario si hay alguna posibilidad de que otro subproceso cancele una clave o cierre un canal.

Un subproceso bloqueado en una operación de selección puede ser interrumpido por algún otro subproceso de una de estas tres maneras:

<ul>

<Li>

Invocando el método del #wakeup wakeup selector,

</Li>

<Li>

Al invocar el método del #close close selector, o

</Li>

<Li>

Al invocar el método del java.lang.Thread#interrupt() interrupt subproceso bloqueado, en cuyo caso se establecerá su estado de interrupción y se invocará el método del #wakeup wakeup selector.

</Li>

</ul>

El #close close método se sincroniza en el selector y su conjunto de claves seleccionadas en el mismo orden que en una operación de selección.

"ksc">

El conjunto de claves de un selector es seguro para su uso por varios subprocesos simultáneos. Las operaciones de recuperación del conjunto de claves no suelen bloquearse, por lo que pueden superponerse con nuevos registros que agreguen al conjunto o con los pasos de cancelación de las operaciones de selección que quitan las claves del conjunto. Los iteradores y los divisores devuelven elementos que reflejan el estado del conjunto en algún momento o desde la creación del iterador/divisor. No inician java.util.ConcurrentModificationException ConcurrentModificationException.

"sksc">

El conjunto de claves seleccionado de un selector no es, en general, seguro para su uso por varios subprocesos simultáneos. Si este tipo de subproceso puede modificar el conjunto directamente, el acceso debe controlarse mediante la sincronización en el propio conjunto. Los iteradores devueltos por los métodos del java.util.Set#iterator() iterator conjunto no son rápidos: si el conjunto se modifica después de crear el iterador, excepto invocando el método propio java.util.Iterator#remove() remove del iterador, se producirá una java.util.ConcurrentModificationException excepción .

Agregado en la versión 1.4.

Documentación de Java para java.nio.channels.Selector.

Las partes de esta página son modificaciones basadas en el trabajo creado y compartido por el proyecto de código abierto de Android y se usan según los términos descritos en la licencia de atribución de Creative Commons 2.5.

Constructores

Selector()

Inicializa una nueva instancia de esta clase.

Selector(IntPtr, JniHandleOwnership)

Constructor utilizado al crear representaciones administradas de objetos JNI; llamado por el tiempo de ejecución.

Propiedades

Class

Devuelve la clase en tiempo de ejecución de este Objectobjeto .

(Heredado de Object)
Handle

Identificador de la instancia de Android subyacente.

(Heredado de Object)
IsOpen

Indica si este selector está abierto.

JniIdentityHashCode

Multiplexor de SelectableChannel objetos.

(Heredado de Object)
JniPeerMembers

Multiplexor de SelectableChannel objetos.

PeerReference

Multiplexor de SelectableChannel objetos.

(Heredado de Object)
ThresholdClass

Esta API admite la infraestructura mono para Android y no está pensada para usarse directamente desde el código.

ThresholdType

Esta API admite la infraestructura mono para Android y no está pensada para usarse directamente desde el código.

Métodos

Clone()

Crea y devuelve una copia de este objeto.

(Heredado de Object)
Close()

Cierra este selector.

Dispose()

Multiplexor de SelectableChannel objetos.

(Heredado de Object)
Dispose(Boolean)

Multiplexor de SelectableChannel objetos.

(Heredado de Object)
Equals(Object)

Indica si algún otro objeto es "igual a" este.

(Heredado de Object)
GetHashCode()

Devuelve un valor de código hash del objeto.

(Heredado de Object)
JavaFinalize()

Lo llama el recolector de elementos no utilizados en un objeto cuando la recolección de elementos no utilizados determina que no hay más referencias al objeto .

(Heredado de Object)
Keys()

Devuelve el conjunto de claves de este selector.

Notify()

Activa un único subproceso que está esperando en el monitor de este objeto.

(Heredado de Object)
NotifyAll()

Activa todos los subprocesos que están esperando en el monitor de este objeto.

(Heredado de Object)
Open()

Abre un selector.

Provider()

Devuelve el proveedor que creó este canal.

Select()

Selecciona un conjunto de claves cuyos canales correspondientes están listos para las operaciones de E/S.

Select(IConsumer)

Selecciona y realiza una acción en las claves cuyos canales correspondientes están listos para las operaciones de E/S.

Select(IConsumer, Int64)

Selecciona y realiza una acción en las claves cuyos canales correspondientes están listos para las operaciones de E/S.

Select(Int64)

Selecciona un conjunto de claves cuyos canales correspondientes están listos para las operaciones de E/S.

SelectedKeys()

Devuelve el conjunto de claves seleccionado de este selector.

SelectNow()

Selecciona un conjunto de claves cuyos canales correspondientes están listos para las operaciones de E/S.

SelectNow(IConsumer)

Selecciona y realiza una acción en las claves cuyos canales correspondientes están listos para las operaciones de E/S.

SetHandle(IntPtr, JniHandleOwnership)

Establece la propiedad Handle.

(Heredado de Object)
ToArray<T>()

Multiplexor de SelectableChannel objetos.

(Heredado de Object)
ToString()

Devuelve una representación de cadena del objeto.

(Heredado de Object)
UnregisterFromRuntime()

Multiplexor de SelectableChannel objetos.

(Heredado de Object)
Wait()

Hace que el subproceso actual espere hasta que se despierta, normalmente por ser em notificado/em> o <em>interrumpido</em>.<><

(Heredado de Object)
Wait(Int64)

Hace que el subproceso actual espere hasta que se despierte, normalmente por ser <em>notificado</em> o <em>interrumpido</em>, o hasta que haya transcurrido una cierta cantidad de tiempo real.

(Heredado de Object)
Wait(Int64, Int32)

Hace que el subproceso actual espere hasta que se despierte, normalmente por ser <em>notificado</em> o <em>interrumpido</em>, o hasta que haya transcurrido una cierta cantidad de tiempo real.

(Heredado de Object)
Wakeup()

Hace que la primera operación de selección que aún no se haya devuelto se devuelva inmediatamente.

Implementaciones de interfaz explícitas

IJavaPeerable.Disposed()

Multiplexor de SelectableChannel objetos.

(Heredado de Object)
IJavaPeerable.DisposeUnlessReferenced()

Multiplexor de SelectableChannel objetos.

(Heredado de Object)
IJavaPeerable.Finalized()

Multiplexor de SelectableChannel objetos.

(Heredado de Object)
IJavaPeerable.JniManagedPeerState

Multiplexor de SelectableChannel objetos.

(Heredado de Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Multiplexor de SelectableChannel objetos.

(Heredado de Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Multiplexor de SelectableChannel objetos.

(Heredado de Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

Multiplexor de SelectableChannel objetos.

(Heredado de Object)

Métodos de extensión

JavaCast<TResult>(IJavaObject)

Realiza una conversión de tipos comprobados en tiempo de ejecución de Android.

JavaCast<TResult>(IJavaObject)

Multiplexor de SelectableChannel objetos.

GetJniTypeName(IJavaPeerable)

Multiplexor de SelectableChannel objetos.

Se aplica a