몇 가지 다른 NIO 채널 및 기타 객체를 처리하는 다소 복잡한 루프가 있습니다. 이러한 객체 중 일부는 Selector을 호출하여 처리 (즉, "선택"- 이벤트)를 트리거합니다. wakeup(). 실수로 select()마다 호출하기 전에 항상 웨이크 업()를 호출하여 바쁜 루프로 내 스레드를 넣어select() 전에 wakeup()을 호출하면 Selector.select()가 selectedKeys()를 채우지 않습니다.
, 나는 내 다른 NIO 채널이 더 이상 있었다 모든 서비스를 얻는 것으로 나타났습니다 없습니다. 통화 중 루프를 유발하는 조건이 사라지 자마자 다른 모든 채널은 즉시 평소와 같이 다시 서비스되었습니다. 더 이상 서비스되는 내 다른 채널의 이유는 즉시 반환하는 경우 가 선택()이 selectedKeys()의 목록을 기입하지 않았다 것을 내가 알아 낸이와 장난을 조금 후
대기 중으로 인해 웨이크 업()입니다.
이 예상되는 동작입니까? 나는이 세부 사항에 관한 문서에서 아무것도 찾을 수 없었다.
그렇다면, 추가 selectNow()와 모든 선택()에 따라보다 더 우아하게이 문제를 방지하는 방법은 무엇입니까?
여기에 문서가 있습니까? 나는 그 웨이크 업()을 추측하고 있었다. 고르다(); selectNow()와 같습니다. –
wakeup(); selectNow(); 선택한 키를 채우지도 않습니까? –