Selector Classe

Definição

Um 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
Herança
Selector
Derivado
Atributos
Implementações

Comentários

Um multiplexor de SelectableChannel objetos.

Um seletor pode ser criado invocando o #open open método dessa classe, que usará o padrão java.nio.channels.spi.SelectorProvider selector provider do sistema para criar um novo seletor. Um seletor também pode ser criado invocando o java.nio.channels.spi.SelectorProvider#openSelector openSelector método de um provedor de seletor personalizado. Um seletor permanece aberto até ser fechado por meio de seu #close close método.

"ks">

O registro de um canal selecionável com um seletor é representado por um SelectionKey objeto. Um seletor mantém três conjuntos de chaves de seleção:

<ul>

<li>

O conjunto de chaves contém as chaves que representam os registros de canal atuais desse seletor. Esse conjunto é retornado pelo #keys() keys método.

</li>

<li>

O conjunto de chaves selecionadas é o conjunto de chaves, de modo que o canal de cada chave foi detectado para estar pronto para pelo menos uma das operações identificadas no conjunto de interesses da chave durante uma operação de seleção anterior que adiciona chaves ou atualiza chaves no conjunto. Esse conjunto é retornado pelo #selectedKeys() selectedKeys método. O conjunto de chaves selecionadas é sempre um subconjunto do conjunto de chaves.

</li>

<li>

O conjunto de chaves canceladas é o conjunto de chaves que foram canceladas, mas cujos canais ainda não foram desregistrados. Esse conjunto não está diretamente acessível. O conjunto de chaves canceladas é sempre um subconjunto do conjunto de chaves.

</li>

</ul>

Todos os três conjuntos estão vazios em um seletor recém-criado.

Uma chave é adicionada ao conjunto de chaves de um seletor como um efeito colateral do registro de um canal por meio do método do SelectableChannel#register(Selector,int) register canal. As chaves canceladas são removidas do conjunto de chaves durante as operações de seleção. O conjunto de chaves em si não é diretamente modificável.

Uma chave é adicionada ao conjunto de chaves canceladas de seu seletor quando ela é cancelada, seja fechando seu canal ou invocando seu SelectionKey#cancel cancel método. O cancelamento de uma chave fará com que seu canal seja desregistrado durante a próxima operação de seleção, momento em que a chave será removida de todos os conjuntos de chaves do seletor.

"sks">

As chaves são adicionadas ao conjunto de chaves selecionadas por operações de seleção. Uma chave pode ser removida diretamente do conjunto de chaves selecionadas invocando o método do java.util.Set#remove(java.lang.Object) remove conjunto ou invocando o java.util.Iterator#remove() remove método de um java.util.Iterator iterator obtido do conjunto. Todas as chaves podem ser removidas do conjunto de chaves selecionadas invocando o método do java.util.Set#clear() clear conjunto. As chaves podem não ser adicionadas diretamente ao conjunto de chaves selecionadas.

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

Uma operação de seleção consulta o sistema operacional subjacente para uma atualização quanto à preparação de cada canal registrado para executar qualquer uma das operações identificadas pelo conjunto de interesses de sua chave. Há duas formas de operação de seleção:

<ol>

<li>

Os #select()métodos , #select(long)e #selectNow() adicionar as chaves de canais prontos para executar uma operação ao conjunto de chaves selecionadas ou atualizar o conjunto de chaves de operação pronta já no conjunto de chaves selecionadas.

</li>

<li>

#select(Consumer, long)Os #select(Consumer)métodos , e #selectNow(Consumer) executar uma ação na chave de cada canal que está pronto para executar uma operação. Esses métodos não adicionam ao conjunto de chaves selecionadas.

</li>

</ol>

<operações de seleção h3>que adicionam ao conjunto< de chaves selecionadas/h3>

Durante cada operação de seleção, as chaves podem ser adicionadas e removidas do conjunto de chaves selecionadas de um seletor e podem ser removidas de seus conjuntos de chaves e chaves canceladas. A seleção é executada pelos #select()métodos e #selectNow() métodos #select(long)e envolve três etapas:

<ol>

<li>

Cada chave no conjunto de chaves canceladas é removida de cada conjunto de chaves do qual é membro e seu canal é desregistrado. Esta etapa deixa o conjunto de chaves canceladas vazio.

</li>

<li>

O sistema operacional subjacente é consultado para uma atualização quanto à preparação de cada canal restante para executar qualquer uma das operações identificadas pelo conjunto de interesses de sua chave a partir do momento em que a operação de seleção começou. Para um canal pronto para pelo menos uma dessas operações, uma das duas ações a seguir é executada:

<ol>

<li>

Se a chave do canal ainda não estiver no conjunto de chaves selecionadas, ela será adicionada a esse conjunto e seu conjunto de operações prontas será modificado para identificar exatamente as operações para as quais o canal agora está pronto. Todas as informações de preparação registradas anteriormente no conjunto pronto são descartadas.

</li>

<li>

Caso contrário, a chave do canal já está no conjunto de chaves selecionadas, portanto, seu conjunto de operações prontas é modificado para identificar as novas operações para as quais o canal é relatado estar pronto. Todas as informações de preparação registradas anteriormente no conjunto pronto são preservadas; em outras palavras, o conjunto pronto retornado pelo sistema subjacente é desarticulado bit a bit no conjunto pronto atual da chave.

</li>

</ol>

Se todas as chaves no conjunto de chaves no início desta etapa tiverem conjuntos de juros vazios, nem o conjunto de chaves selecionadas nem qualquer um dos conjuntos de operações prontas das chaves serão atualizados.

<li>

Se alguma chave tiver sido adicionada ao conjunto de chaves canceladas enquanto a etapa (2) estava em andamento, elas serão processadas como na etapa (1).

</li>

</ol>

Se uma operação de seleção bloqueia ou não a espera para que um ou mais canais fiquem prontos e, se sim, por quanto tempo, é a única diferença essencial entre os três métodos de seleção.

<Operações de seleção h3>que executam uma ação em chaves selecionadas</h3>

Durante cada operação de seleção, as chaves podem ser removidas da chave do seletor, da chave selecionada e dos conjuntos de chaves canceladas. A seleção é executada pelos #select(Consumer)métodos e #selectNow(Consumer) métodos #select(Consumer,long)e envolve três etapas:

<ol>

<li>

Cada chave no conjunto de chaves canceladas é removida de cada conjunto de chaves do qual é membro e seu canal é desregistrado. Esta etapa deixa o conjunto de chaves canceladas vazio.

</li>

<li>

O sistema operacional subjacente é consultado para uma atualização quanto à preparação de cada canal restante para executar qualquer uma das operações identificadas pelo conjunto de interesses de sua chave a partir do momento em que a operação de seleção começou.

Para um canal pronto para pelo menos uma dessas operações, o conjunto de operações prontas da chave do canal é definido para identificar exatamente as operações para as quais o canal está pronto e a ação especificada para o select método é invocada para consumir a chave do canal. Todas as informações de preparação registradas anteriormente no conjunto pronto são descartadas antes de invocar a ação.

Como alternativa, quando um canal está pronto para mais de uma operação, a ação pode ser invocada mais de uma vez com a chave do canal e o conjunto de operações prontas modificados para um subconjunto das operações para as quais o canal está pronto. Quando a ação é invocada mais de uma vez para a mesma chave, seu conjunto de operações prontas nunca contém bits de operação contidos no conjunto em chamadas anteriores para a ação na mesma operação de seleção.

</li>

<li>

Se alguma chave tiver sido adicionada ao conjunto de chaves canceladas enquanto a etapa (2) estava em andamento, elas serão processadas como na etapa (1).

</li>

</ol>

<h2>Simultaneidade</h2>

Um Seletor e seu conjunto de chaves são seguros para uso por vários threads simultâneos. No entanto, o conjunto de chaves selecionadas e o conjunto de chaves canceladas não são.

As operações de seleção são sincronizadas no próprio seletor, no conjunto de chaves selecionadas, nessa ordem. Eles também sincronizam no conjunto de chaves canceladas durante as etapas (1) e (3) acima.

As alterações feitas nos conjuntos de juros das chaves de um seletor enquanto uma operação de seleção está em andamento não têm efeito sobre essa operação; eles serão vistos pela próxima operação de seleção.

As chaves podem ser canceladas e os canais podem ser fechados a qualquer momento. Portanto, a presença de uma chave em um ou mais conjuntos de chaves de um seletor não implica que a chave seja válida ou que seu canal esteja aberto. O código do aplicativo deve ter cuidado para sincronizar e verificar essas condições conforme necessário se houver alguma possibilidade de que outro thread cancele uma chave ou feche um canal.

Um thread bloqueado em uma operação de seleção pode ser interrompido por algum outro thread de uma das três maneiras:

<ul>

<li>

Invocando o método do #wakeup wakeup seletor,

</li>

<li>

Invocando o método do #close close seletor ou

</li>

<li>

Invocando o método do java.lang.Thread#interrupt() interrupt thread bloqueado, nesse caso, seu status de interrupção será definido e o método do #wakeup wakeup seletor será invocado.

</li>

</ul>

O #close close método é sincronizado no seletor e no conjunto de chaves selecionadas na mesma ordem que em uma operação de seleção.

"ksc">

O conjunto de chaves de um seletor é seguro para uso por vários threads simultâneos. As operações de recuperação do conjunto de chaves geralmente não bloqueiam e, portanto, podem se sobrepor a novos registros que adicionam ao conjunto ou com as etapas de cancelamento de operações de seleção que removem chaves do conjunto. Iteradores e divisores retornam elementos que refletem o estado do conjunto em algum momento em ou desde a criação do iterador/spliterator. Eles não jogam java.util.ConcurrentModificationException ConcurrentModificationException.

"sksc">

O conjunto de chaves selecionadas de um seletor não é, em geral, seguro para uso por vários threads simultâneos. Se esse thread puder modificar o conjunto diretamente, o acesso deverá ser controlado sincronizando-se no próprio conjunto. Os iteradores retornados pelos métodos do java.util.Set#iterator() iterator conjunto são rapidamente reprovados: se o conjunto for modificado após a criação do iterador, de qualquer forma, exceto invocando o próprio java.util.Iterator#remove() remove método do iterador, um java.util.ConcurrentModificationException será gerado.

Adicionado em 1.4.

Java documentação para java.nio.channels.Selector.

Partes desta página são modificações baseadas no trabalho criado e compartilhado pelo Project Open Source do Open Source e usadas de acordo com os termos descritos na Creative Commons 2.5.

Construtores

Nome Description
Selector()

Inicializa uma nova instância dessa classe.

Selector(IntPtr, JniHandleOwnership)

Um construtor usado ao criar representações gerenciadas de objetos JNI; chamado pelo runtime.

Propriedades

Nome Description
Class

Retorna a classe de runtime deste Object.

(Herdado de Object)
Handle

O identificador para a instância subjacente do Android.

(Herdado de Object)
IsOpen

Indica se esse seletor está aberto.

JniIdentityHashCode

Um multiplexor de SelectableChannel objetos.

(Herdado de Object)
JniPeerMembers

Um multiplexor de SelectableChannel objetos.

PeerReference

Um multiplexor de SelectableChannel objetos.

(Herdado de Object)
ThresholdClass

Essa API dá suporte à infraestrutura do Mono para Android e não se destina a ser usada diretamente do seu código.

ThresholdType

Essa API dá suporte à infraestrutura do Mono para Android e não se destina a ser usada diretamente do seu código.

Métodos

Nome Description
Clone()

Cria e retorna uma cópia desse objeto.

(Herdado de Object)
Close()

Fecha esse seletor.

Dispose()

Um multiplexor de SelectableChannel objetos.

(Herdado de Object)
Dispose(Boolean)

Um multiplexor de SelectableChannel objetos.

(Herdado de Object)
Equals(Object)

Indica se algum outro objeto é "igual a" este.

(Herdado de Object)
GetHashCode()

Retorna um valor de código hash para o objeto.

(Herdado de Object)
JavaFinalize()

Chamado pelo coletor de lixo em um objeto quando a coleta de lixo determina que não há mais referências ao objeto.

(Herdado de Object)
Keys()

Retorna o conjunto de chaves desse seletor.

Notify()

Ativa um único thread que está aguardando no monitor deste objeto.

(Herdado de Object)
NotifyAll()

Ativa todos os threads que estão aguardando no monitor deste objeto.

(Herdado de Object)
Open()

Abre um seletor.

Provider()

Retorna o provedor que criou este canal.

Select()

Seleciona um conjunto de chaves cujos canais correspondentes estão prontos para operações de E/S.

Select(IConsumer, Int64)

Seleciona e executa uma ação nas chaves cujos canais correspondentes estão prontos para operações de E/S.

Select(IConsumer)

Seleciona e executa uma ação nas chaves cujos canais correspondentes estão prontos para operações de E/S.

Select(Int64)

Seleciona um conjunto de chaves cujos canais correspondentes estão prontos para operações de E/S.

SelectedKeys()

Retorna o conjunto de chaves selecionadas desse seletor.

SelectNow()

Seleciona um conjunto de chaves cujos canais correspondentes estão prontos para operações de E/S.

SelectNow(IConsumer)

Seleciona e executa uma ação nas chaves cujos canais correspondentes estão prontos para operações de E/S.

SetHandle(IntPtr, JniHandleOwnership)

Define a propriedade Handle

(Herdado de Object)
ToArray<T>()

Um multiplexor de SelectableChannel objetos.

(Herdado de Object)
ToString()

Retorna uma representação de cadeia de caracteres do objeto.

(Herdado de Object)
UnregisterFromRuntime()

Um multiplexor de SelectableChannel objetos.

(Herdado de Object)
Wait()

Faz com que o thread atual aguarde até ser despertado, normalmente por ser <notificado/em> ou <em>interrompido</em>.<>

(Herdado de Object)
Wait(Int64, Int32)

Faz com que o thread atual aguarde até que ele seja despertado, normalmente por ser <>notificado</em> ou <em>interrompido</em>, ou até que uma determinada quantidade de tempo real tenha decorrido.

(Herdado de Object)
Wait(Int64)

Faz com que o thread atual aguarde até que ele seja despertado, normalmente por ser <>notificado</em> ou <em>interrompido</em>, ou até que uma determinada quantidade de tempo real tenha decorrido.

(Herdado de Object)
Wakeup()

Causa a primeira operação de seleção que ainda não retornou para retornar imediatamente.

Implantações explícitas de interface

Nome Description
IJavaPeerable.Disposed()

Um multiplexor de SelectableChannel objetos.

(Herdado de Object)
IJavaPeerable.DisposeUnlessReferenced()

Um multiplexor de SelectableChannel objetos.

(Herdado de Object)
IJavaPeerable.Finalized()

Um multiplexor de SelectableChannel objetos.

(Herdado de Object)
IJavaPeerable.JniManagedPeerState

Um multiplexor de SelectableChannel objetos.

(Herdado de Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Um multiplexor de SelectableChannel objetos.

(Herdado de Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Um multiplexor de SelectableChannel objetos.

(Herdado de Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

Um multiplexor de SelectableChannel objetos.

(Herdado de Object)

Métodos de Extensão

Nome Description
GetJniTypeName(IJavaPeerable)

Obtém o nome JNI do tipo da instância self.

JavaAs<TResult>(IJavaPeerable)

Tente coagir a digitar selfTResult, verificando se a coerção é válida no lado Java.

JavaCast<TResult>(IJavaObject)

Executa uma conversão de tipo marcada por runtime do Android.

JavaCast<TResult>(IJavaObject)

Um multiplexor de SelectableChannel objetos.

TryJavaCast<TResult>(IJavaPeerable, TResult)

Tente coagir a digitar selfTResult, verificando se a coerção é válida no lado Java.

Aplica-se a