자바 스레드 조인 예제

Java Thread join 메서드는 지정된 스레드가 종료될 때까지 현재 스레드 실행을 일시 중지하는 데 사용할 수 있습니다. 세 가지 오버로드된 join 함수가 있습니다.

Java Thread join

public final void join(): 이 java thread join 메서드는 호출된 스레드가 종료될 때까지 현재 스레드를 대기 상태로 둡니다. 스레드가 중단되면 InterruptedException이 발생합니다. public final synchronized void join(long millis): 이 java thread join 메서드는 호출된 스레드가 종료되기를 기다리거나 지정된 밀리초 동안 대기하는 데 사용됩니다. 스레드 실행은 OS 구현에 따라 달라지므로 현재 스레드가 주어진 시간만큼만 대기하는 것을 보장하지 않습니다. public final synchronized void join(long millis, int nanos): 이 java thread join 메서드는 주어진 밀리초 및 나노초 동안 스레드가 종료될 때까지 대기하는 데 사용됩니다. 여기에는 Thread join 메서드 사용 예제가 있습니다. 이 프로그램의 목표는 main이 마지막으로 완료되고 세 번째 스레드가 첫 번째 스레드가 종료될 때만 시작되도록하는 것입니다.

package com.journaldev.threads;

public class ThreadJoinExample {

    public static void main(String[] args) {
        Thread t1 = new Thread(new MyRunnable(), "t1");
        Thread t2 = new Thread(new MyRunnable(), "t2");
        Thread t3 = new Thread(new MyRunnable(), "t3");
        
        t1.start();
        
        //2초를 기다린 후 두 번째 스레드를 시작하거나 스레드가 종료된 경우
        try {
            t1.join(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        
        t2.start();
        
        //첫 번째 스레드가 종료된 후에만 세 번째 스레드를 시작합니다
        try {
            t1.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        
        t3.start();
        
        //주 스레드가 종료되기 전에 모든 스레드의 실행이 완료되도록합니다
        try {
            t1.join();
            t2.join();
            t3.join();
        } catch (InterruptedException e) {
            // TODO 자동 생성된 catch 블록
            e.printStackTrace();
        }
        
        System.out.println("All threads are dead, exiting main thread");
    }

}

class MyRunnable implements Runnable{

    @Override
    public void run() {
        System.out.println("Thread started:::"+Thread.currentThread().getName());
        try {
            Thread.sleep(4000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("Thread ended:::"+Thread.currentThread().getName());
    }
    
}

위 프로그램의 출력은:

Thread started:::t1
Thread started:::t2
Thread ended:::t1
Thread started:::t3
Thread ended:::t2
Thread ended:::t3
All threads are dead, exiting main thread

자바 스레드 조인 예제에 대한 간략한 요약입니다.

Source:
https://www.digitalocean.com/community/tutorials/java-thread-join-example