AbstractSelector — 셀렉터를 위한 기반 구현 클래스
AbstractSelector — 셀렉터를 위한 기반 구현 클래스
AbstractSelector는 셀렉터(selector)를 위한 기반 구현 클래스예요. 이 클래스는 선택 연산의 인터럽트(interruption)를 구현하는 데 필요한 저수준 메커니즘을 캡슐화해요. 구체적인 셀렉터 클래스는 무한히 블로킹될 수 있는 I/O 연산을 호출하기 전후에 각각 begin과 end 메서드를 호출해야 해요.
본문
public abstract class AbstractSelector extends Selector
셀렉터의 기반 구현 클래스예요. 이 클래스는 선택 연산의 인터럽트를 구현하는 데 필요한 저수준 메커니즘을 캡슐화해요. 구체적인 셀렉터 클래스는 무한히 블로킹될 수 있는 I/O 연산을 호출하기 전과 후에 각각 begin과 end 메서드를 호출해야 해요. end 메서드가 항상 호출되도록 하려면 두 메서드를 try ... finally 블록 안에서 사용해야 해요:
try {
begin();
// 여기서 블로킹 I/O 연산 수행
...
} finally {
end();
}
이 클래스는 또한 셀렉터의 취소된 키 집합(cancelled-key set)을 유지하고 채널의 키 집합에서 키를 제거하는 메서드, 그리고 선택 가능한 채널의 register 메서드가 채널 등록의 실제 작업을 수행하기 위해 호출하는 추상 register 메서드를 정의해요. Java 1.4부터 사용할 수 있어요.
생성자
protected AbstractSelector(SelectorProvider provider)
이 클래스의 새 인스턴스를 초기화해요.
매개변수: provider — 이 셀렉터를 만든 프로바이더
메서드 요약
| 수식자와 타입 | 메서드 | 설명 |
|---|---|---|
protected final void |
begin() |
무한히 블로킹될 수 있는 I/O 연산의 시작을 표시해요. |
protected final Set<SelectionKey> |
cancelledKeys() |
셀렉터의 취소된 키 집합을 가져와요. |
final void |
close() |
셀렉터를 닫아요. |
protected final void |
deregister(AbstractSelectionKey key) |
주어진 키를 채널의 키 집합에서 제거해요. |
protected final void |
end() |
무한히 블로킹될 수 있는 I/O 연산의 끝을 표시해요. |
protected abstract void |
implCloseSelector() |
셀렉터를 닫아요. |
final boolean |
isOpen() |
셀렉터가 열려 있는지 여부를 알려줘요. |
final SelectorProvider |
provider() |
이 채널을 만든 프로바이더를 반환해요. |
protected abstract SelectionKey |
register(AbstractSelectableChannel ch, int ops, Object att) |
주어진 채널을 이 셀렉터에 등록해요. |
close
public final void close() throws IOException
이 셀렉터를 닫아요. 이미 닫혀 있다면 메서드는 즉시 반환해요. 그렇지 않으면 셀렉터를 닫힘으로 표시하고 닫기 작업을 완료하기 위해 implCloseSelector 메서드를 호출해요. AutoCloseable, Closeable, Selector의 close에 의해 지정돼요.
예외: IOException — I/O 오류가 발생한 경우
implCloseSelector
protected abstract void implCloseSelector() throws IOException
이 셀렉터를 닫아요. 실제 셀렉터 닫기 작업을 수행하기 위해 close 메서드가 이 메서드를 호출해요. 이 메서드는 셀렉터가 아직 닫히지 않은 경우에만 호출되며, 두 번 이상 호출되지 않아요. 구현은 이 셀렉터에 대한 선택 연산에서 블로킹된 다른 스레드가 wakeup 메서드를 호출한 것처럼 즉시 반환하도록 조치해야 해요.
isOpen
public final boolean isOpen()
셀렉터가 열려 있는지 여부를 알려줘요. Selector의 isOpen에 의해 지정돼요. 셀렉터가 열려 있으면 true를, 그렇지 않으면 false를 반환해요.
provider
public final SelectorProvider provider()
이 채널을 만든 프로바이더를 반환해요. Selector의 provider에 의해 지정돼요.
cancelledKeys
protected final Set<SelectionKey> cancelledKeys()
셀렉터의 취소된 키 집합을 가져와요. 이 집합은 동기화한 상태에서만 사용해야 해요.
register
protected abstract SelectionKey register(AbstractSelectableChannel ch, int ops, Object att)
주어진 채널을 이 셀렉터에 등록해요. 이 메서드는 채널을 이 셀렉터에 등록하는 실제 작업을 수행하기 위해 채널의 register 메서드에 의해 호출돼요.
매개변수: ch — 등록할 채널, ops — 유효해야 하는 초기 관심 집합, att — 결과 키의 초기 첨부물
deregister
protected final void deregister(AbstractSelectionKey key)
주어진 키를 채널의 키 집합에서 제거해요. 셀렉터는 등록을 해제하는 각 채널에 대해 이 메서드를 호출해야 해요.
begin
protected final void begin()
무한히 블로킹될 수 있는 I/O 연산의 시작을 표시해요. 이 셀렉터에 대한 인터럽트를 구현하려면 위에 보여준 대로 try ... finally 블록에서 end 메서드와 함께 호출해야 해요. 이 메서드를 호출하면 스레드가 셀렉터에 대한 I/O 연산에서 블로킹되는 동안 스레드의 interrupt 메서드가 호출될 때 셀렉터의 wakeup 메서드가 호출되도록 처리해요.
end
protected final void end()
무한히 블로킹될 수 있는 I/O 연산의 끝을 표시해요. 이 셀렉터에 대한 인터럽트를 구현하려면 위에 보여준 대로 try ... finally 블록에서 begin 메서드와 함께 호출해야 해요.