Thread.sleep()
Thread.sleep()
은 Thread가 특정 시간동안 대기해야 할 때 사용되는 메서드
테스트 시 사용되는 등 종종 아래와 같이 사용될 때가 있음
public static void sleep(long millis) {
try {
Thread.sleep(millis);
} catch (**InterruptedException ex**) {
// 적절히 처리 필요!
}
}
InterruptedExcpetion
위와 같이 Thread.sleep()
에서 지정한 시간이 지나면 발생하는 체크 예외로, 아래 조건에서 발생
Thread.sleep()
와 같이 수면중이거나 다른 방식으로 점유중일 때 발생하고, 활동 전 또는 활동 중에 스레드가 중단될 때 발생현재 스레드의 인터럽트 여부 확인 후 아래와 같이 예외 발생시킬 수 있음
if (thread.interrupted()) throw new InterruptedException();
Thread에 하던 일을 중단하라는 신호를 보내기 위해 사용
interrupt()
메서드 호출true
로 변경interrupt()
참고)InterruptedException
예외가 발생 여부 확인 (❌)interrupted()
, isInterrupted()
호출을 통해 Thread 내 인터럽트 플래그 확인 (⭕)interrupt()
public void interrupt()
SecurityException
발생 가능wait()
, join()
, sleep()
메서드에서 호출이 차단되면 인터럽트 플래그가 false
로 변경되고 InterruptedException
발생InterruptibleChannel
의 I/O 작업에서 블로킹된 상태인 경우 인터럽트 플래그가 true
로 설정되고 ClosedByInterruptException
발생Selector
에서 차단된 경우 Thread 인터럽트 플래그를 true
로 설정 후 선택 작업을 0
이 아닌 값으로 즉시 반환💡 InterruptibleChannel이란?
- java.nio.channels 패키지 내 클래스로, 비동기적으로 닫고 중단 가능한 네트워크 연결에 사용되는 채널
FileChannel
,SocketChannel
등이 해당 인터페이스를 구현
💡 Selector란?
- Non-Blocking I/O 연산을 관리하는 데 사용
- 단일 스레드로 여러 네트워크 채널의 I/O 이벤트를 효율적으로 처리 가능
interrupted()
public static boolean interrupted()
true
반환 후 인터럽트 플래그는 false
로 변경됨false
반환isInterrupted()
public boolean isInterrupted()
interrupted()
와 달리 인터럽트 플래그 변경을 진행하지 않음false
반환