본문 바로가기

반응형

이번 글에서는 Thread 객체를 사용해
비프음 출력과 문자 출력을 동시에 실행하는 멀티스레드 구조를 실습합니다.
Runnable 인터페이스를 익명 구현 객체로 만들어 스레드에 전달하고,
start()를 호출하면 메인 흐름과는 별도의 독립 실행 흐름이 생성됩니다.


📌 예제 코드

import java.awt.Toolkit;

public class BeepPrintExample {
    public static void main(String[] args) {
        // 새로운 스레드 정의
        Thread thread = new Thread(new Runnable() {
            public void run() {
                Toolkit toolkit = Toolkit.getDefaultToolkit();
                for (int i = 0; i < 5; i++) {
                    toolkit.beep();  // 비프음 출력
                    System.out.println("Thread beep");
                    try {
                        Thread.sleep(500);  // 0.5초 대기
                    } catch (Exception e) {
                        // 예외 무시
                    }
                }
            }
        });

        thread.start();  // 스레드 실행

        // 메인 스레드에서 실행되는 반복문
        for (int i = 0; i < 5; i++) {
            System.out.println("띵");
            try {
                Thread.sleep(500);  // 0.5초 대기
            } catch (Exception e) {
                // 예외 무시
            }
        }
    }
}

💻 실행 결과 (실행 환경마다 순서는 달라질 수 있음)

Thread beep
띵
Thread beep
띵
Thread beep
띵
Thread beep
띵
Thread beep
띵

※ 비프음은 시스템 사운드로 출력되며, "Thread beep"는 비프음 직후 함께 출력됨


💬 코드 설명

  • new Thread(Runnable) 구조로 새로운 스레드를 정의하고,
    run() 메서드에 실행할 코드를 작성합니다.
  • thread.start()를 호출하면, 이 스레드가 메인 스레드와 병렬로 실행됩니다.
  • main() 메서드 안의 "띵" 출력 루프는 메인 스레드가 직접 실행하며,
    이로써 두 개의 루프가 동시에 반복 실행되는 구조가 만들어집니다.
  • Thread.sleep(500)으로 두 루프 모두 0.5초마다 동작하므로,
    실행 순서는 비교적 교대로 보이지만 실제 순서는 OS 스케줄링에 따라 달라질 수 있음

💡 포인트 정리

  • Runnable은 run() 메서드 하나만 정의된 스레드 실행용 함수형 인터페이스입니다.
  • new Thread(Runnable).start() 구조는 멀티스레드 기본 작성법
  • 하나의 프로그램 안에서 여러 작업을 동시에 실행하고자 할 때 반드시 필요한 개념
  • UI 동작과 계산, 사운드 처리 등을 분리할 때도 자주 사용됩니다.

📌 정리하자면, 이번 예제는 Thread를 통해 하나의 작업(비프음 + 출력)을 별도의 흐름으로 실행하면서,
메인 스레드에서는 "띵" 텍스트를 병렬로 출력하게 만드는 구조입니다.
이는 자바 멀티스레드 프로그래밍의 기본 형태이며, 실제 애플리케이션 동시 작업 구현의 기초가 되는 구조입니다.

댓글