일부 테스트 코드를 작성하면서 Selector.select()가 처리 할 키가 포함 된 Selector.selectedKeys()없이 반환 할 수 있음을 발견했습니다. 관심있는 조작으로Java NIO select()는 선택된 키없이 반환합니다 - 그 이유는 무엇입니까?
SelectionKey.OP_READ | SelectionKey.OP_CONNECT
이있는 accept() 채널을 등록 할 때 이것은 단단한 루프에서 발생합니다.
워드 프로세서에 따르면, 선택() 할 때 반환해야합니다 :
1)에 따라 행동 할 수있는 채널이있다.
2) 명시 적으로 Selector.wakeup()을 호출합니다. 키가 선택되지 않습니다.
3) select()를 수행하는 스레드를 명시 적으로 Thread.interrupt() - 키를 선택하지 않았습니다.
select() 후에 아무 키도 표시되지 않으면 케이스 (2)와 (3)에 있어야합니다. 그러나 내 코드는 wakeup() 또는 interrupt()를 호출하여 이러한 반환을 시작하지 않습니다.
이 문제의 원인은 무엇입니까?
답변 해 주셔서 감사합니다. 이것은 분명히 선택의 행동에 예외이지만, 쉽게 해결할 수 있습니다. –
@FrankTaylor 왜 프로그래밍 오류가 '선택 동작에 이상'으로 간주되어야하는지 모르겠습니다. – EJP