Поток Java блокируется при регистрации канала с помощью селектора, когда вызывается select (). Что делать?

У меня есть основной вопрос. Почему и как метод регистра SelectableChannel может быть при блокировании вызова. Позвольте мне представить сценарий.

Я создал объект Selector в классе Register следующим образом.

<code>private static Selector selector = Selector.open();
</code>

У меня также есть метод в том же классе (Регистрация), чтобы зарегистрировать канал с помощью селектора.

<code>public static SelectionKey registerChannel(SelectableChannel channel, int ops)
                             throws IOException {
   channel.configureBlocking(false);
   return channel.register(selector, ops);
}
</code>

И есть другой класс с именем Request, у которого есть метод, который читает данные из каналов, обрабатывает и вызывает следующий метод для регистрации канала.

<code>selectonKey = Register.register(socketChannel, SelectionKey.OP_READ);
</code>

Здесь на этом этапе поток заблокирован, не давая понять, что он ждет. Я проверил, что селектор открыт. Пожалуйста, предоставьте мне некоторую помощь, чтобы понять, как я могу решить эту проблему. Есть ли замок, который я могу снять.

Любой вклад будет оценен.

Добавление к тому, что я описал. Дальнейшие тесты показали, что если метод Register.register вызывается из того же потока, он может зарегистрироваться, но после этого, если какой-то другой поток пытается вызвать метод, поток не продвигается.

Ответы на вопрос(5)

Ваш ответ на вопрос