Blocos de encadeamentos Java ao registrar o canal com o seletor enquanto select () é chamado. O que fazer?
Eu tenho uma pergunta básica. Por que e como o método de registro do SelectableChannel pode estar bloqueando a chamada. Deixe-me fornecer um cenário.
Eu criei um objeto Selector na classe Register da seguinte maneira.
<code>private static Selector selector = Selector.open(); </code>
Eu também tenho um método na mesma classe (Register) para registrar o canal com o seletor.
<code>public static SelectionKey registerChannel(SelectableChannel channel, int ops) throws IOException { channel.configureBlocking(false); return channel.register(selector, ops); } </code>
E há outra classe chamada Request, que possui um método que lê os dados dos canais, processa e chama o método a seguir para registrar o canal.
<code>selectonKey = Register.register(socketChannel, SelectionKey.OP_READ); </code>
Aqui neste ponto o fio está bloqueado, não dando pistas do que está esperando. Eu verifiquei que o seletor está aberto. Por favor, forneça-me alguma ajuda para entender como posso resolver isso. Existe algum bloqueio que eu possa liberar.
Qualquer entrada seria apreciada.
Adicionando ao que eu descrevi. Testes posteriores revelaram que se o método Register.register é chamado a partir do mesmo thread, ele é capaz de se registrar, mas depois disso, se algum outro thread tentar invocar o método, o thread não se move adiante.