У меня есть основной вопрос. Почему и как метод регистров SelectableChannel может быть при блокировке вызова. Позвольте мне представить сценарий.
Я создал объект Selector в классе Register следующим образом.
private static Selector selector = Selector.open();
У меня также есть метод в том же классе (Регистрация), чтобы зарегистрировать канал с помощью селектора.
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 вызывается из того же потока, он может зарегистрироваться, но после этого, если какой-то другой поток пытается вызвать метод, поток не продвигается.