sleep()
- 지정된 시간 동안 현재 스레드의 실행을 일시 정지하고, 대기상태로 빠졌다가 시간이 지나면 실행대기 상태로 전환된다.
- 네이티브 메서드로 연결되며 시스템 콜을 통해 커널모드에서 수행 후 유저모드로 전환한다.
API 및 예외

- interrupt ⇒ 중단의 신호를 보낸다.
- interruptedException
- 다른 Thread는 sleep 스레드에게 중단 신호를 보낼 수 있다.
- 예외가 발생하면 수면상태에서 깨어나고 실행 대기 상태로 전환된다.

- interrupt를 걸면 timed waiting ⇒ runnable로 전환.

- sleep(0)은 뭐지?
- Thread가 sleep하면 커널모드로 전환된다.
- 스케줄러가 현재 스레드와 동일한 우선순위의 스레드가 있을 경우, 실행대기상태 스레드에게 CPU를 할당함으로 컨텍스트 스위칭이 일어난다.
- 만약 없으면, 스케줄러는 현재 스레드에 계속 cpu를 할당시킨다.(sleep 없음)
- sleep(n)
- 스레드가 커널 모드로 전환 후에 스케줄러는 조건에 상관 없이 현재 스레드를 대기상태에 두고 다른 스레드에게 CPU를 할당함으로 모든 전환과 함께 컨텍스트 스위칭이 발생한다.

- 동기화 메서드 영역에서 수면(sleep) 중인 중인 스레드는 모니터나 락을 잃지 않는다.
- 만약 스레드가 wait에 빠지면?(ex. i.o)
- 그러면 바로 자기가 가진 lock을 해제한다.
Join()

- 한 스레드가 다른 스레드의 종료를 기다리며 waiting.