자바(Java)에서 sleep() 메소드는 Thread 클래스에 속한 정적(static) 메소드로, 현재 실행 중인 스레드를 지정된 시간 동안 일시 정지(sleep)시키는 역할을 합니다.
Thread.sleep() 메소드를 호출하면 내부적으로 스레드 스케줄러(thread scheduler)와 상호작용하여 현재 스레드를 일정 시간 동안 대기(waiting) 상태로 전환합니다. 지정된 대기 시간이 끝나면 스레드는 다시 실행 가능(runnable) 상태로 변경되어 CPU 할당을 기다리게 됩니다.
InterruptedException 처리
sleep() 메소드는 스레드가 다른 스레드에 의해 인터럽트(interrupt)될 경우 InterruptedException을 발생시킵니다. 이는 확인된 예외(checked exception)이므로 반드시 try-catch 블록으로 감싸거나 메소드 선언부에 throws 절로 예외 처리를 명시해야 합니다.
문법(Syntax)
public static void sleep(long milliseconds) public static void sleep(long milliseconds, int nanoseconds)
- sleep(long milliseconds): 스레드를 지정된 밀리초(millisecond) 단위의 시간 동안 일시 정지시킵니다.
- sleep(long milliseconds, int nanoseconds): 밀리초에 나노초(nanosecond)를 더한 정밀한 시간만큼 스레드를 일시 정지시킵니다.
예제 코드
class UserThread extends Thread {
public void run() {
for(int i = 1; i <= 5; i++) {
System.out.println("User Thread");
try {
Thread.sleep(1000); // 1초 동안 스레드 일시 정지
} catch(InterruptedException e) {
System.out.println("예외가 발생했습니다: " + e);
}
}
}
}
public class SleepMethodTest {
public static void main(String args[]) {
UserThread ut = new UserThread();
ut.start(); // 스레드 시작
}
}실행 결과
User Thread User Thread User Thread User Thread User Thread
위 예제에서 스레드는 각 반복마다 1초(1000밀리초)씩 멈추기 때문에 "User Thread"가 출력되는 사이에 약 1초의 간격이 생깁니다. 이처럼 sleep() 메소드는 작업 사이에 의도적인 지연을 만들거나, 특정 주기로 작업을 반복 실행할 때 유용하게 활용됩니다.