반응형
이번 글에서는 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 등 다양한 흐름 제어 메서드를 제공하며,
효율적인 멀티스레드 환경을 구현하는 데 필수적인 도구입니다.
'프로그래밍 > JAVA' 카테고리의 다른 글
133. 스레드 충돌 막기 – synchronized로 동기화 처리 (1) | 2025.05.19 |
---|---|
132. 스레드 양보하기 – Thread.yield() 활용 (0) | 2025.05.19 |
131. 스레드가 끝날 때까지 기다리기 – join() 활용 예제 (0) | 2025.05.19 |
129. 스레드 이름 지정과 확인 – getName()과 setName() (0) | 2025.05.19 |
128. 이번엔 상속으로 – Thread 직접 상속하기 (0) | 2025.05.15 |
127. 동시에 소리와 출력 실행하기 – Thread로 병렬 처리 (0) | 2025.05.15 |