Класс Selector
является абстрактным, и фактическая операция зависит от того, какую реализацию Selector
действительно возвращает SelectorProvider
.Они зависят от операционной системы.
Если реализация использует sun.nio.ch.SelectorImpl
от Sun в качестве базового класса (он тоже абстрактный), то можно заметить, что методы select()
синхронизируются с открытыми ключами перед вызовомабстрактный doSelect()
метод.Метод register()
также синхронизируется с открытыми ключами, и поэтому вполне возможно, что регистру придется ждать выбора, а выбор никогда не завершится, потому что ничего не зарегистрировано.поэтому мы не можем быть уверены.Я заметил, что документация Selector
описывает, как открепить нить, застрявшую в select()
, так что, вероятно, она возникает достаточно часто, чтобы ее можно было документировать, и поэтому вы вправе беспокоиться.