코드 그라데이션

Day30-31. Thread(쓰레드) (2) join() 본문

Java/Mega

Day30-31. Thread(쓰레드) (2) join()

완벽한 장면 2023. 4. 26. 12:46

join()

- 자기도 하나의 쓰레드지만, 다른 하나가 끝날 때까지 기다렸다가 실행하는 것.

(쓰레드 만든(부른) 애가.)

 

join() 의 흐름.

 

* join() 을 걸면 main에 있는 애가 무조건 가장 마지막으로 기다렸다가 받아서 동작함.

* 그런데 이것도 하나의 실행 흐름이기 때문에 main이 아닌 다른 곳에서도 join을 쓰면 걔가 마지막까지 기다렸다가 동작.

 

실생활에서 예시를 찾아보면

- 식당에서, 종업원들이 다 집에 가고 난 후 사장이 최종 점검하고 문 닫고 퇴근하는 것.

 

join() 예시 코드

package Day30;

class DThread extends Thread {
	DThread(String str) {
		setName(str); // 쓰레드 이름을 지정할 수 있다.
		// 이건 쓰레드 안에 기본적으로 제공하는 메서드.
	}
	
	public void run() { // 무조건 4번형식이다 run은
		for(int i = 1; i<=10; i++) {
			System.out.println(getName() + i);
		}
		
		System.out.println("완료! " + getName());
	}
}


public class ExDoubleThread2 {

	public static void main(String[] args) throws InterruptedException {

		DThread t1 = new DThread("자바");
		DThread t2 = new DThread("스프링");
		System.out.println("쓰레드 동작 전 ============");
		t1.start();
		t2.start(); // 얘네들 먼저 시작을 걸어놓고 join()을 불러야.
		t1.join(); // 예외처리 필요
		t2.join();
		System.out.println("쓰레드 동작 후 ==============="); // 이게 가장 마지막에 나옴 무조건. 기다려준다고 했기 때문에

	}

}

 

실행 결과

- 가운데는 중구난방

쓰레드 동작 전 ============
자바1
자바2
자바3
자바4
자바5
자바6
자바7
자바8
자바9
스프링1
스프링2
자바10
스프링3
완료! 자바
스프링4
스프링5
스프링6
스프링7
스프링8
스프링9
스프링10
완료! 스프링
쓰레드 동작 후 ===============
728x90
Comments