JAVA

[Java] Thread Method : join()

lakelight 2022. 7. 29. 14:06
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