본문으로 바로가기

[자바]쓰레드(thread) - join

category Java 2017. 8. 10. 17:38

안녕하세요~~ thread (쓰레드) 의 기본적인 구조를 알아본뒤  이번엔 join 에 대해 알아보겠습니다.


바로 아래 예제를 보면서 설명을 하겠씁니다.

public class ThreadJoin { public static void main(String[] args) { System.out.println(Thread.currentThread().getName() + "start"); Runnable r = new MyRunnable(); Thread thread = new Thread(r); thread.start(); System.out.println(Thread.currentThread().getName() + "end"); } } class MyRunnable implements Runnable{ @Override public void run() { // TODO Auto-generated method stub System.out.println("쓰레드1단계"); thread2(); } public void thread2() { System.out.println("쓰레드2단계"); thread3(); } public void thread3() { System.out.println("쓰레드3단계"); } }


위 코드의 실행 결과는 

이렇게 나옵니다.!!!! 

우리가 알기론 메인이 끝나면 모든게 종료되는걸로 알고있는데 쓰레드는 그렇지 않습니다.. 메인이 종료되어도 백그라운드에서 돌아가기 때문입니다.


하지만 이런 쓰레드도 join(조인)을 이용하여 제어를 할 수 있는데요..

public class ThreadJoin {
	
	public static void main(String[] args) {
		System.out.println(Thread.currentThread().getName() + "start");
		Runnable r = new MyRunnable();
		Thread thread = new Thread(r);
		thread.start();
		try {
			thread.join();
		} catch (Exception e) {
			// TODO: handle exception
		}
		System.out.println(Thread.currentThread().getName() + "end");
	}

}

class MyRunnable implements Runnable{

	@Override
	public void run() {
		// TODO Auto-generated method stub
		System.out.println("쓰레드1단계");
		thread2();
	}
	
	public void thread2() {
		System.out.println("쓰레드2단계");
		thread3();
	}

	public void thread3() {
		System.out.println("쓰레드3단계");
	}
}


이와같이 join을 사용한다면 해당 쓰레드가 종료되기까지 기다렸다가 다음으로 넘어갑니다!!


그래서 

 이와같은 결과를 얻을수 있습니다.