Selector Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Um multiplexador 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
- Derivado
- Atributos
- Implementações
Comentários
Um multiplexador 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é que seja 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 interesse 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 cancelados. 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 é cancelada, seja fechando seu canal ou invocando seu SelectionKey#cancel cancel
método. O cancelamento de uma chave fará com que seu canal seja cancelado 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 não podem ser adicionadas diretamente ao conjunto de teclas selecionadas.
"selop"><h2>Seleção</h2>
Uma operação de seleção consulta o sistema operacional subjacente para obter uma atualização quanto à prontidão de cada canal registrado para executar qualquer uma das operações identificadas pelo conjunto de interesses de sua chave. Existem duas formas de operação de seleção:
<Ol>
<li>
Os #select()
métodos , #select(long)
e #selectNow()
adicionam as chaves dos canais prontos para executar uma operação ao conjunto de chaves selecionadas ou atualizam o conjunto de chaves de operação pronta que já estão no conjunto de chaves selecionadas.
</li>
<li>
Os #select(Consumer)
métodos , #select(Consumer, long)
e #selectNow(Consumer)
executam uma ação na chave de cada canal que está pronto para executar uma operação. Esses métodos não são adicionados ao conjunto de chaves selecionadas.
</li>
</Ol>
<h3>Operações de seleção que adicionam ao conjunto< de teclas 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 é realizada pelos #select()
métodos , #select(long)
e #selectNow()
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 é cancelado. Esta etapa deixa o conjunto de chaves canceladas vazio.
</li>
<li>
O sistema operacional subjacente é consultado para obter uma atualização quanto à prontidão de cada canal restante para executar qualquer uma das operações identificadas pelo conjunto de interesse de sua chave a partir do momento em que a operação de seleção começou. Para um canal que está 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 é relatado como pronto. Qualquer informação de prontidão registrada anteriormente no conjunto pronto é descartada.
</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 quaisquer novas operações para as quais o canal é relatado como pronto. Todas as informações de prontidão previamente registradas no conjunto pronto são preservadas; Em outras palavras, o conjunto pronto retornado pelo sistema subjacente é separado 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 interesses vazios, nem o conjunto de chaves selecionadas nem qualquer um dos conjuntos de operação pronta das chaves serão atualizados.
<li>
Se alguma chave foi adicionada ao conjunto de chaves canceladas enquanto a etapa (2) estava em andamento, elas são processadas como na etapa (1).
</li>
</Ol>
Se uma operação de seleção bloqueia ou não esperar que um ou mais canais fiquem prontos e, em caso afirmativo, por quanto tempo, é a única diferença essencial entre os três métodos de seleção.
<h3>Operações de seleção que executam uma ação em teclas selecionadas</h3>
Durante cada operação de seleção, as chaves podem ser removidas dos conjuntos de chaves, chaves selecionadas e chaves canceladas do seletor. A seleção é realizada pelos #select(Consumer)
métodos , #select(Consumer,long)
e #selectNow(Consumer)
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 é cancelado. Esta etapa deixa o conjunto de chaves canceladas vazio.
</li>
<li>
O sistema operacional subjacente é consultado para obter uma atualização quanto à prontidão de cada canal restante para executar qualquer uma das operações identificadas pelo conjunto de interesse de sua chave a partir do momento em que a operação de seleção começou.
Para um canal que está 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. Qualquer informação de prontidão registrada anteriormente no conjunto pronto é descartada 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 foi adicionada ao conjunto de chaves canceladas enquanto a etapa (2) estava em andamento, elas sã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. Seu conjunto de chaves selecionadas e o conjunto de chaves canceladas, no entanto, não são.
As operações de seleção são sincronizadas no próprio seletor, no conjunto de teclas selecionadas, nessa ordem. Eles também são sincronizados no conjunto de teclas canceladas durante as etapas (1) e (3) acima.
As alterações feitas nos conjuntos de interesses 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 é válida ou que seu canal está aberto. O código do aplicativo deve ter o cuidado de 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>
Ao invocar o método do #wakeup wakeup
seletor,
</li>
<li>
Invocando o método do #close close
seletor, ou
</li>
<li>
Ao invocar 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 sincroniza no seletor e seu conjunto de teclas 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 são bloqueadas e, portanto, podem se sobrepor a novos registros que são adicionados ao conjunto ou às etapas de cancelamento das operações de seleção que removem chaves do conjunto. Iteradores e divisores retornam elementos que refletem o estado do conjunto em algum ponto ou desde a criação do iterador/divisor. Eles não jogam java.util.ConcurrentModificationException ConcurrentModificationException
.
"SKSC">
O conjunto de teclas selecionadas de um seletor não é, em geral, seguro para uso por vários threads simultâneos. Se esse thread pode modificar o conjunto diretamente, o acesso deve ser controlado pela sincronização no próprio conjunto. Os iteradores retornados java.util.Set#iterator() iterator
pelos métodos do conjunto são fail-fast: Se o conjunto for modificado depois que o iterador for criado, de qualquer forma, exceto invocando o próprio java.util.Iterator#remove() remove
método do iterador, um java.util.ConcurrentModificationException
será lançado.
Adicionado em 1.4.
Documentação Java para java.nio.channels.Selector
.
Partes desta página são modificações baseadas no trabalho criado e compartilhado pelo Android Open Source Project e usado de acordo com os termos descritos na Creative Commons 2.5 Attribution License.
Construtores
Selector() |
Inicializa uma nova instância desta classe. |
Selector(IntPtr, JniHandleOwnership) |
Um construtor usado ao criar representações gerenciadas de objetos JNI; chamado pelo tempo de execução. |
Propriedades
Class |
Retorna a classe de tempo de execução deste |
Handle |
O identificador para a instância subjacente do Android. (Herdado de Object) |
IsOpen |
Indica se esse seletor está aberto. |
JniIdentityHashCode |
Um multiplexador de |
JniPeerMembers |
Um multiplexador de |
PeerReference |
Um multiplexador de |
ThresholdClass |
Esta API suporta a infraestrutura Mono para Android e não se destina a ser usada diretamente do seu código. |
ThresholdType |
Esta API suporta a infraestrutura Mono para Android e não se destina a ser usada diretamente do seu código. |
Métodos
Clone() |
Cria e retorna uma cópia desse objeto. (Herdado de Object) |
Close() |
Fecha este seletor. |
Dispose() |
Um multiplexador de |
Dispose(Boolean) |
Um multiplexador de |
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 esse 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 teclas cujos canais correspondentes estão prontos para operações de E/S. |
Select(IConsumer) |
Seleciona e executa uma ação nas teclas 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 teclas 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 teclas 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 multiplexador de |
ToString() |
Retorna uma representação de cadeia de caracteres do objeto. (Herdado de Object) |
UnregisterFromRuntime() |
Um multiplexador de |
Wait() |
Faz com que o thread atual aguarde até que ele seja ativado, normalmente sendo <em 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 sendo <em>notificado</em> ou <em interrompido</em>, ou até que>uma certa quantidade de tempo real tenha decorrido. (Herdado de Object) |
Wait(Int64) |
Faz com que o thread atual aguarde até que ele seja despertado, normalmente sendo <em>notificado</em> ou <em interrompido</em>, ou até que>uma certa quantidade de tempo real tenha decorrido. (Herdado de Object) |
Wakeup() |
Faz com que a primeira operação de seleção que ainda não retornou retorne imediatamente. |
Implantações explícitas de interface
IJavaPeerable.Disposed() |
Um multiplexador de |
IJavaPeerable.DisposeUnlessReferenced() |
Um multiplexador de |
IJavaPeerable.Finalized() |
Um multiplexador de |
IJavaPeerable.JniManagedPeerState |
Um multiplexador de |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
Um multiplexador de |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Um multiplexador de |
IJavaPeerable.SetPeerReference(JniObjectReference) |
Um multiplexador de |
Métodos de Extensão
JavaCast<TResult>(IJavaObject) |
Executa uma conversão de tipo verificada em tempo de execução do Android. |
JavaCast<TResult>(IJavaObject) |
Um multiplexador de |
GetJniTypeName(IJavaPeerable) |
Um multiplexador de |