본문 바로가기

Programming/JAVA

멀티 스레드(6) - 스레드 상태 제어 4

 

 

 

○ 다른 스레드의 종료 기다리기( join( ) )

 

스레드는 기본적으로 다른 스레드와 독립적으로 실행하는 것이 기본입니다. 하지만, 다른 스레드가 종료될 때까지 기다렸다가 실행해야 하는 경우도 발생할 수 있습니다. 예를 들어 하나의 스레드에서 계산 작업을 진행하고, 다른 스레드에서 이 결과값을 받는 경우가 있죠. 

 

Thread는 이런 상황을 위해 join( ) 메서드를 제공합니다. 간단히 설명하자면, ThreadA에서 ThreadB를 실행하고, ThreadB의 join( )을 실행하면 ThreadA는 ThreadB가 종료될 때 까지 일시 정지 상태가 됩니다. ThreadB의 run( ) 메서드가 종료되어야 비로소 ThreadA는 다시 실행 상태가 됩니다. 

 

ThreadA에서 threadB.start( )를 실행하고나서, threadB.join( )을 실행하면 ThreadB의 run( )이 실행되고, 이와 동시에 ThreadA는 일시 정지 상태가 되는 것이죠. 그리고 ThreadB의 run( )이 종료되면 ThreadA는 다시 실행 상태가 됩니다. 

 

* join( )은 "쳐들어오는 스레드"가 쓰는 메서드라고 이해합시다.

 

아래 예제는 메인 스레드가 SumThread가 계산을 모두 마칠때까지 일시 정지 되어 있다가, SumThread가 최종 계산된 결과값을 산출 후 종료해야 메인 스레드가 결과값을 받아 출력을 진행합니다. 

 

 

 


 

 

 

// SumThread.java
// 1 부터 100까지 합
public class SumThread extends Thread {
	private long sum;
	
	public long getSum() {
		return sum;
	}
	
	public void setSum(long sum) {
		this.sum = sum;
	}
	
	public void run() {
		for(int i=1; i<=100; i++) {
			sum += i;
		}
	}
}

 

 

import java.awt.Toolkit;

public class ExampleMain {
	public static void main(String[] args) {
		SumThread sumThread = new SumThread();
		sumThread.start();
		
		try {
			sumThread.join();
		} catch (InterruptedException e) {
			
		}
		
		System.out.println("1~100 합: " +  sumThread.getSum());
	}
}