자바 NIO 의 Selector 깊이 이해(선택 기)
다음은 선택 기 를 사용 합 니 다.
selector.open()방법 을 통 해 선택 기 를 만 들 수 있 습 니 다.
Selector selector = Selector.open();
채널 을 선택 기 에 등록 하기:
channel.configureBlocking(false);
SelectionKey key = channel.register(selector, SelectionKey.OP_READ);
채널 이 Selector 에 등록 하려 면 이 채널 은 반드시 차단 되 지 않 아야 합 니 다.즉,channel.configure Blocking(false)입 니 다.Channel 이 막 히 지 않 으 면 안 되 기 때문에 FileChannel 은 선택 기 를 사용 할 수 없습니다.FileChannel 이 모두 막 히 기 때 문 입 니 다.채널.register()방법 을 사용 할 때 두 번 째 매개 변 수 는 채널 의 어떤 유형의 이벤트 에 관심 이 있 는 지 지정 합 니 다.이 이벤트 들 은 다음 과 같 습 니 다.
우 리 는 여러 사건 을 조합 하기 위해 사용 하거나 연산 할 수 있 습 니 다.예 를 들 어:
int interestSet = SelectionKey.OP_READ | SelectionKey.OP_WRITE;
한 채널 은 하나의 Selector 에 한 번 만 등록 할 수 있 습 니 다.만약 에 채널 을 Selector 에 여러 번 등록 하면 사실은 SelectionKey 를 업데이트 하 는 interest set 에 해당 합 니 다.예 를 들 어:
channel.register(selector, SelectionKey.OP_READ);
channel.register(selector, SelectionKey.OP_READ | SelectionKey.OP_WRITE);
위의 channel 은 같은 selector 에 두 번 등 록 했 습 니 다.그러면 두 번 째 등록 은 이 채널 을 업데이트 하 는 interest set 에 해당 하 는 selection Key.OP 입 니 다.READ | SelectionKey.OP_WRITE.그러나 자바 NIO 의 selector 는 하나의 스 레 드 로 여러 채널 의 입력 을 감청 할 수 있 습 니 다.우 리 는 여러 채널 을 selector 에 등록 한 후에 하나의 스 레 드 로 읽 을 수 있 거나 쓸 수 있 는 상태 에 있 는 channel 을 선택 할 수 있 습 니 다.selector 메커니즘 은 단일 라인 관리 여러 채널 을 쉽게 합 니 다.
다음 에 우 리 는 완전한 예 를 써 서 selector 의 용법 을 보 겠 습 니 다.
//
Selector selector = Selector.open();
channel.configureBlocking(false);
//
SelectionKey key = channel.register(selector, SelectionKey.OP_READ);
while(true) {
// selector key
int readyChannels = selector.select();
// 0 , 0 , 0
if(readyChannels == 0) continue;
// key
Set<SelectionKey> selectedKeys = selector.selectedKeys();
Iterator<SelectionKey> keyIterator = selectedKeys.iterator();
while(keyIterator.hasNext()) {
SelectionKey key = keyIterator.next();
// ,
if(key.isAcceptable()) {
// ServerSocketChannel
} else if (key.isConnectable()) {
// .
} else if (key.isReadable()) {
//
} else if (key.isWritable()) {
//
}
keyIterator.remove();
}
}
선택 기의 사용 은 아직도 많은 세부 사항 이 있 습 니 다.api 문 서 를 많이 보고 각 방법의 용법 을 알 아야 합 니 다.다음 절 에 종합 연습 을 해서 NIO 의 사용 을 정리 하 겠 습 니 다.이상 은 자바 NIO 의 Selector(선택 기)에 대한 상세 한 내용 을 깊이 있 게 이해 하 는 것 입 니 다.자바 nio Selector(선택 기)에 관 한 자 료 는 다른 관련 글 을 주목 하 세 요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.