728x90
반응형
Join() Method
쓰레드가 실행될 때 쓰레드가 종료될 때까지 기다린 후 다른 쓰레드를 실행시키거나 메인 함수를 실행해야하는 경우가 있습니다. 이때 Thread.join()을 사용해서 해당 쓰레드가 종료 될 때까지 Non-Runnable 상태로 만들 수 있습니다.
Join() 구현
package Java.thread;
public class ThreadJoinTest extends Thread{
int start;
int end;
int total; //멤버변수는 초기화하지 않아도 0으로 자동 초기화됩니다.
public ThreadJoinTest(int start, int end) {
this.start = start;
this.end = end;
}
public void run(){
//로직
for (int i = start; i <= end; i++) {
total += i;
}
}
public static void main(String[] args) {
ThreadJoinTest th1 = new ThreadJoinTest(1, 50);
ThreadJoinTest th2 = new ThreadJoinTest(51, 100);
th1.start();
th2.start();
//해결 방법 코드 구현
try {
th1.join();
th2.join();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
//해결 방법 코드 구현
System.out.println(th1.total + th2.total);
// 결과 0으로 출력
}
}
문제점
쓰레드가 수행되기 전에 출력이 먼저 발생했기 때문입니다.
해결
쓰레드가 모두 종료되었을 때 출력이 되어야 합니다. thread.join() 메서드를 통해 해결할 수 있습니다.
하지만 .join() 메서드는 Non-Runnable 상태에서 다시 Runnable 상태로 돌아오려면 작업이 모두 수행되어야 하는데
만약 작업이 무한루프에 빠진다면 복귀를 할 수 없기 때문에 인터럽트 예외처리를 해주어서
무한루프 시에 빠져나와서 Main을 종료 할 수 있도록 해야 합니다.
728x90
반응형
'JAVA' 카테고리의 다른 글
[Java] Thread Method : wait(), notify() (0) | 2022.07.31 |
---|---|
[Java] Thread Synchronization (0) | 2022.07.29 |
[Java] Priority Thread (0) | 2022.07.29 |
[Java] Thread (0) | 2022.07.29 |
[Java] Decorator Pattern (0) | 2022.07.28 |