본문 바로가기

반응형

이번 글에서는 Thread.sleep()을 사용하여
1초 간격으로 소리와 메시지를 반복 출력하는 예제를 실습합니다.
그리고 스레드 흐름 제어에 사용되는 주요 메서드들에 대해 함께 정리합니다.


📌 예제 코드

import java.awt.Toolkit;

public class SleepExample {
    public static void main(String[] args) {
        Toolkit toolkit = Toolkit.getDefaultToolkit();
        for (int i = 0; i < 10; i++) {
            System.out.println("beep-!");
            toolkit.beep();  // 비프음 출력
            try {
                Thread.sleep(1000);  // 1초간 일시정지
            } catch (Exception e) {
                // 예외 무시
            }
        }
    }
}

💻 실행 결과

beep-!
(1초 후)
beep-!
(1초 후)
...
총 10회 반복

💡 1초마다 "beep-!" 메시지 출력과 함께 시스템 비프음이 울림
OS에 따라 소리가 들리지 않을 수 있음


💬 코드 설명

  • Thread.sleep(1000)은 현재 실행 중인 스레드를 1초(=1000밀리초) 동안 일시 정지시킵니다.
  • 루프 내에서 sleep()을 호출하면 반복 간 시간 간격을 조절할 수 있습니다.
  • 예외 처리 구문(try-catch)은 필수이며, InterruptedException이 발생할 수 있습니다.

💡 포인트 정리 – 스레드 제어 메서드 요약

메서드 설명
sleep(long millis) 현재 스레드를 지정된 시간만큼 일시 정지시킴. 예외 처리가 필요함
join() 다른 스레드의 작업이 끝날 때까지 현재 스레드를 대기 상태로 만듦
wait() 현재 스레드를 일시정지 상태로 만들고 notify()가 호출될 때까지 대기함. 동기화 블록 안에서만 사용 가능
notify() wait() 상태에 있는 하나의 스레드를 깨움
notifyAll() wait() 상태에 있는 모든 스레드를 깨움
interrupt() 대기 상태나 sleep 상태인 스레드를 깨워서 예외를 발생시킴 (InterruptedException)
yield() 현재 스레드의 실행을 양보하고 CPU를 다른 스레드에게 넘김. 강제성은 없음

📌 주요 메서드 사용 예시

// sleep 예시
Thread.sleep(1000); // 1초 일시 정지

// join 예시
threadA.join(); // threadA가 끝날 때까지 대기

// interrupt 예시
threadB.interrupt(); // threadB가 sleep/wait 중이면 깨움

// wait / notify 예시 (동기화 필요)
synchronized(obj) {
    obj.wait();     // 대기
    obj.notify();   // 깨움
}

📌 정리하자면, 이번 예제는 Thread.sleep()을 사용해 1초마다 반복적으로 알림을 출력하는 구조입니다.
스레드는 sleep 외에도 join, wait, notify, interrupt, yield 등 다양한 흐름 제어 메서드를 제공하며,
효율적인 멀티스레드 환경을 구현하는 데 필수적인 도구입니다.

댓글