WatchKey — 감시 키

WatchKey — 감시 키

감시 가능 객체를 WatchService에 등록하는 것을 나타내는 토큰이에요. 감시 가능 객체가 감시 서비스에 등록될 때 감시 키가 만들어져요. 키는 다음과 같은 때까지 유효해요: 명시적으로 cancel 메서드를 호출해 취소하거나, 객체에 더 이상 접근할 수 없어 암시적으로 취소되거나, 감시 서비스가 닫힐 때까지예요.

출처: Java API Reference

본문

감시 키는 상태를 가져요. 처음 만들어졌을 때 키는 준비(ready) 상태예요. 이벤트가 감지되면 키는 신호(signalled) 상태가 되어 큐에 들어가, 감시 서비스의 poll이나 take 메서드로 가져올 수 있어요. 일단 신호 상태가 되면 키는 reset 메서드를 호출해 준비 상태로 돌아갈 때까지 그 상태를 유지해요. 신호 상태에서 감지된 이벤트는 큐에 쌓이지만 키를 다시 큐에 넣지는 않아요.

  • boolean isValid() — 이 감시 키가 유효한지 여부를 반환해요. 키는 생성 시 유효하며 취소되거나 감시 서비스가 닫힐 때까지 유지돼요.
  • List<WatchEvent<?>> pollEvents() — 이 감시 키에 대해 대기 중인 모든 이벤트를 가져와 제거하고, 가져온 이벤트의 List를 반환해요. 대기 중인 이벤트가 없으면 기다리지 않아요.
  • boolean reset() — 이 감시 키를 리셋해요. 취소됐거나 이미 준비 상태면 아무 효과가 없어요. 그렇지 않으면 객체에 대기 중인 이벤트가 있을 때 이 키를 신호 상태로 두고, 없으면 준비 상태로 되돌려요.
  • void cancel() — 감시 서비스와의 등록을 취소해요. 호출 후 감시 키는 유효하지 않게 돼요. 키가 큐에 있으면 가져올 때까지 큐에 남아요.
  • Watchable watchable() — 이 감시 키가 만들어진 객체를 반환해요. 키가 취소된 후에도 그 객체를 계속 반환해요.
for (;;) {{
    WatchKey key = watcher.take();
    for (WatchEvent<?> event : key.pollEvents()) {{
        // 이벤트 처리
    }}
    boolean valid = key.reset();
    if (!valid) {{
        break; // 객체가 더 이상 등록되지 않음
    }}
}}

더 알아보기 (Learn more)