При написании тестового кода я обнаружил, что Selector.select () может вернуться без Selector.selectedKeys (), содержащего какие-либо ключи для обработки. Это происходит в тесном цикле, когда я регистрирую канал accept () с помощью
SelectionKey.OP_READ | SelectionKey.OP_CONNECT
как интересующие операции.
Согласно документации, select () должен возвращаться, когда:
1) Есть каналы, на которые можно воздействовать.
2) Вы явно вызываете Selector.wakeup () - ключи не выбраны.
3) Вы явно используете Thread.interrupt () для потока, выполняющего select () - ключи не выбраны.
Если я не получаю ключей после выбора (), я должен быть в случаях (2) и (3). Однако мой код не вызывает wakeup () или interrupt (), чтобы инициировать эти возвраты.
Есть идеи, что вызывает такое поведение?