Java/자바 정리

131. 스레드가 끝날 때까지 기다리기 – join() 활용 예제

코딩하는냥이 2025. 5. 19. 11:56
반응형

이번 글에서는 join() 메서드를 사용해서
다른 스레드가 실행을 마칠 때까지 현재 스레드를 일시정지시키는 방법을 배워봅니다.
이 기능은 스레드 작업 결과를 사용해야 할 때, 필수적으로 사용하는 흐름 제어 방식입니다.


📌 예제 코드

✅ 합계 계산 스레드 (SumThread.java)

package ch14.sec05;

public class SumThread extends Thread {
    private long sum;

    public long getSum() {
        return sum;
    }

    public void run() {
        for (int i = 1; i <= 100; i++)
            sum += i;  // 1부터 100까지 더하기
    }
}

✅ 메인 클래스 (JoinExample.java)

package ch14.sec05;

public class JoinExample {
    public static void main(String[] args) {
        SumThread sumThread = new SumThread();  // 합계 스레드 생성
        sumThread.start();                      // 스레드 시작

        try {
            sumThread.join();  // sumThread가 끝날 때까지 main 스레드 대기
        } catch (Exception e) {
            // 예외 처리
        }

        System.out.println("1~100 합: " + sumThread.getSum());  // 결과 출력
    }
}

💻 실행 결과

1~100 합: 5050

💬 코드 설명

  • SumThread는 Thread를 상속받은 클래스이며, run() 메서드에서 1부터 100까지의 합을 계산합니다.
  • sumThread.start()로 새로운 스레드를 실행하면, 이 작업은 메인 스레드와 동시에 실행됩니다.
  • join()을 호출하면 sumThread가 끝날 때까지 main 스레드는 일시정지 상태에 들어갑니다.
  • sumThread.getSum()은 join()으로 스레드가 완료된 뒤 안전하게 결과를 읽을 수 있게 됩니다.

💡 포인트 정리

메서드 설명
start() 스레드를 시작 (비동기 실행 시작)
join() 해당 스레드가 끝날 때까지 대기
getSum() 계산된 결과를 반환하는 사용자 정의 메서드
  • join()이 없다면, 메인 스레드가 먼저 종료될 수도 있어 결과가 정확하지 않을 수 있음
  • 예외는 InterruptedException이 발생할 수 있으므로 try-catch 필수

📌 정리하자면, join()은 다른 스레드가 작업을 마칠 때까지 기다려야 할 상황에서 꼭 필요한 메서드입니다.
이번 예제에서는 sumThread가 1~100까지의 합을 계산하는 동안,
main() 스레드는 join()을 통해 대기하고, 스레드 완료 후 안전하게 결과를 받아 출력할 수 있었습니다.