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.

questionAnswers(5)

yourAnswerToTheQuestion