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()을 통해 대기하고, 스레드 완료 후 안전하게 결과를 받아 출력할 수 있었습니다.