JAVA

[JAVA] Thread.sleep()

오선지♬ 2025. 9. 24. 13:28
728x90
반응형

Thread.sleep() 은 자바(Java) 에서 현재 실행 중인 스레드를 일정 시간 동안 일시 정지(대기) 시키는 메서드예요.

 

📌 기본 형식

Thread.sleep(long millis) throws InterruptedException
 
  • millis : 멈출 시간(밀리초 단위, 1초 = 1000ms)

오버로드된 버전으로 나노초 단위까지 받을 수도 있습니다:

Thread.sleep(long millis, int nanos) throws InterruptedException

📌 동작 방식

  • 호출한 스레드는 지정된 시간 동안 실행 상태(Running) 에서 일시 정지(Timed Waiting) 상태로 전환됩니다.
  • 지정된 시간이 지나면, 다시 Runnable(실행 대기) 상태로 돌아가고, CPU 스케줄러가 잡아주면 실행을 계속합니다.
  • 정확히 지정한 시간만큼 멈춘다고 보장되지 않습니다. (운영체제 스케줄링에 따라 더 늦게 깨어날 수 있음)

📌 예제

 
public class SleepExample {
    public static void main(String[] args) {
        System.out.println("시작");

        try {
            Thread.sleep(2000); // 2초 동안 멈춤
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("2초 후 실행");
    }
}

 

실행 결과

시작
(2초 대기)
2초 후 실행

📌 주의사항

  1. InterruptedException 반드시 처리해야 함
    → 스레드가 sleep 상태일 때 다른 스레드가 interrupt()를 호출하면 예외가 발생합니다.
  2. Thread.sleep()은 현재 스레드만 멈춥니다.다른 스레드에는 영향을 주지 않아요.
  3. UI 프로그램 (예: Swing, JavaFX)에서는 메인(UI) 스레드에서 sleep()을 쓰면 UI가 멈춘 것처럼 보일 수 있으니, 별도 스레드에서 사용하는 게 좋아요.
try {
    Thread.sleep(1000);
} catch (InterruptedException e) {
    Thread.currentThread().interrupt(); // 인터럽트 상태 복원
}
728x90
반응형