Bloki wątków Java podczas rejestrowania kanału za pomocą selektora, gdy wywoływana jest opcja select (). Co robić?

Mam podstawowe pytanie. Dlaczego i jak metoda rejestrowania SelectableChannel może być blokująca połączenie. Pozwól, że przedstawię scenariusz.

Utworzono obiekt Selector w klasie Zarejestruj w następujący sposób.

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

Mam również metodę w tej samej klasie (rejestr), aby zarejestrować kanał za pomocą selektora.

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

Jest jeszcze inna klasa o nazwie Request, która ma metodę odczytu danych z kanałów, procesy i wywołuje następującą metodę rejestracji kanału.

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

Tutaj w tym momencie wątek jest zablokowany, nie dając wskazówek, na co czeka. Sprawdziłem, że selektor jest otwarty. Proszę mi pomóc, aby zrozumieć, jak mogę rozwiązać ten problem. Czy jest jakiś zamek, który mogę uwolnić.

Wszelkie dane będą mile widziane.

Dodawanie do tego, co opisałem. Dalsze testy ujawniły, że jeśli metoda Register.register jest wywoływana z tego samego wątku, może się zarejestrować, ale po tym, gdy jakiś inny wątek spróbuje wywołać metodę, wątek nie porusza się do przodu.

questionAnswers(5)

yourAnswerToTheQuestion