Поток 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 вызывается из того же потока, он может зарегистрироваться, но после этого, если какой-то другой поток пытается вызвать метод, поток не продвигается.