У меня есть основной вопрос. Почему и как метод регистра SelectableChannel может быть при блокировке вызова.
Позвольте мне представить сценарий.
Я создал объект Selector в классе Register следующим образом.
private static Selector selector = Selector.open();
У меня также есть метод в том же классе (Register), чтобы зарегистрировать канал с помощью селектора.
public static SelectionKey registerChannel(SelectableChannel channel, int ops)
throws IOException {
channel.configureBlocking(false);
return channel.register(selector, ops);
}
И есть еще один класс с именем Request, в котором есть метод, который считывает данные из каналов, обрабатывает и вызывает следующий метод для регистрации канала.
selectonKey = Register.register(socketChannel, SelectionKey.OP_READ);
Здесь на этом этапе поток заблокирован, не давая понять, что он ждет.
Я проверил, что селектор открыт. Пожалуйста, предоставьте мне некоторую помощь, чтобы понять, как я могу решить эту проблему. Могу ли я снять блокировку?
Любой вклад будет оценен.
Добавление к тому, что я описал. Дальнейшие тесты показали, что если метод Register.register вызывается из того же потока, он может зарегистрироваться, но после этого, если какой-то другой поток пытается вызвать метод, поток не продвигается.