셀렉터

셀렉터 (Selector)

SelectableChannel 객체의 다중화기(multiplexor)예요. 여러 채널의 I/O 준비 상태를 한 번에 감지하는 데 사용합니다.

출처: Java API Reference

본문

SelectorSelectableChannel 객체의 다중화기예요. 하나의 스레드로 여러 채널의 I/O 준비 상태를 감지할 수 있게 해줍니다.

public abstract class Selector extends Object implements Closeable

셀렉터는 open() 메서드로 만들 수 있고, 시스템의 기본 셀렉터 프로바이더를 사용해요. 닫힐 때까지 열려 있으며, 선택 가능 채널의 셀렉터 등록은 SelectionKey로 표현됩니다.

셀렉터는 세 가지 키 집합을 유지해요.

  • 키 집합(key set) — 현재 등록된 채널들을 나타내는 키 모음. keys()로 얻어요.
  • 선택 키 집합(selected-key set) — 이전 선택 연산에서 관심 연산 중 하나 이상에 대해 준비된 것이 감지된 키들의 모음. selectedKeys()로 얻어요.
  • 취소 키 집합(cancelled-key set) — 취소됐지만 아직 채널이 등록 해제되지 않은 키들의 모음. 직접 접근할 수 없어요.
public static Selector open() throws IOException
public abstract Set<SelectionKey> keys()
public abstract Set<SelectionKey> selectedKeys()
public abstract int selectNow() throws IOException
public abstract int select(long timeout) throws IOException
public abstract int select() throws IOException
public abstract Selector wakeup()
public abstract void close() throws IOException

select() 계열은 하나 이상의 채널이 준비될 때까지 블록되고, selectNow()는 블록하지 않고 즉시 반환해요. wakeup()은 블록된 select를 깨우는 데 사용됩니다. 모든 키 집합은 새 셀렉터에서 비어 있어요.

더 알아보기 (Learn more)