Categories: Java 언어Korean

Java 총 정리[92. 쓰레드 join()]

쓰레드 join()

이전 걸음에서 쓰레드의 전반적인 실행 흐름에 대해서 공부를 했습니다. 이제 배운 실행 흐름 중에서  하나 하나 공부를 진행을 하도록 하겠습니다. 이번 걸음에서 첫 번째로 하는 만큼 잘 이해 하고 사용을 하면 좋을 것 같습니다.

쓰레드에서 join()이라는 Method를 이번 걸음에서 같이 공부를 하도록 하겠습니다. join()을 잘 쓰게 되면 각자 동작하게 되는 쓰레드의 움직임에 제어를 할 수가 있습니다. 각자 동작을 하는 쓰레드의 특성이 있기 때문에 제어를 해서 원하는 결과를 빨리 얻을 수 있게 프로그램을 구현을 해야 합니다.

쓰레드의 join()의 특징과 사용 방법을 설명하고 마지막으로 join()을 사용한 예제를 만들고 설명을 함으로써 join()에 대해서 완벽하게 이해와 사용을 할 수가 있습니다. 같이 이번 걸음에서 쓰레드의 join()을 공부를 해보죠!

쓰레드 join() 이란?

위의 사진을 보면서 쓰레드 join()에 대해서 대략적으로 이해를 하실 수 있다고 생각을 합니다. 우선 join()을 쓰게 되면 쓰레드를 생성하게 되는 실행 흐름에서 Start()를 호출해서 run()이 동작이 됩니다. 이때 join() 없이 실행을 하면 각자 알아서 동작하고 끝나게 되지만 join()을 쓰게 되면 쓰레드를 생성을 하는 쓰레드가 있는데 그 쓰레드가 다른 쓰레드 동작이 끝날 때까지 기다리고 본인 쓰레드를 종료하고 제어를 할 수 있습니다.

※위와 같은 상황을 현실에서 접목해서 설명을 하면 가게가 있는데 종업원이 일을 다하고 퇴근을 하면 사장이 마지막에 정리하고 퇴근을 하는 것과 같다고 생각을 하면 됩니다.

  1. thread를 상속을 받은 class의 객체를 생성한다.
  2. 생성된 객체에서 start() Method를 실행한다.
  3. 그 이후에 join() Method를 실행한다.

쓰레드 join() 예제

    
class ThreadTest1 extends Thread{
 public ThreadTest1(String str) { //생성자
  setName(str); // Thread에 setName 있어서 쓰레드 이름 정합니다.
 }
 public void run() {
  for(int i =1; i<=10;i++) {
   System.out.println(i+ getName());
  }
  
  System.out.println("끝" + getName());
 }
}


public class ExDoubleThread2 {

 public static void main(String[] args) throws InterruptedException {
  // TODO Auto-generated method stub
  ThreadTest1 t1 = new ThreadTest1(" : 배우기 쉬운 자바");
  ThreadTest1 t2 = new ThreadTest1(" : 배우기 어려운 자바");
  System.out.println("******** 스레드 시작 전 **************");
  t1.start();
  t2.start();
  t1.join();
  t2.join();
  System.out.println("******** 스레드 종료 후 **************");
 }
 

}

    

위에 결과를 보면 배우기 쉬운과 배우기 어려운 자바는 순서가 상관 없이 출력이 되고 결국 마지막에 스레드 종료 후가 출력이 됩니다. 마지막에 불리는 쓰레드가 main 쓰레드가 됩니다. 이렇게 제어를 하기 위해서 바로 join()이 필요합니다.

Dolphin

Recent Posts

Java 총정리[97. Java GUI]

Java GUI Java GUI에 대해서 이번 걸음에서 배움으로써 GUI에 전반적인 지식과 Java GUI를 구현하는 방법…

4개월 ago

Java 총정리[96. Java TCP 통신 프로그램 구현]

Java TCP 통신 프로그램 구현 Java TCP 통신 프로그램 구현을 위해서 이전 걸음에서 쓰레드에 대한…

5개월 ago

Java 총정리[95.쓰레드 통신]

쓰레드 통신 이전 걸음에서 쓰레드의 임계영역에 대해서 같이 공부를 했습니다. 동기화에 대한 개념을 계속적으로 하고…

5개월 ago

Java 총 정리[94. 쓰레드 임계영역]

쓰레드 임계영역 이전 걸음에서 쓰레드의 동기화에 대해서 같이 공부를 했습니다. 동기화에 대한 전반적인 내용을 공부하고…

6개월 ago

Java 총 정리[93. 쓰레드 동기화]

쓰레드 동기화 이전 걸음에서 계속 쓰레드에 대해서 공부를 하고 있습니다. 쓰레드는 상당히 중요한 개념이기 때문에…

6개월 ago

Java 총 정리[91. 쓰레드 실행 흐름]

쓰레드 실행 흐름 이전 걸음에서 쓰레드에 기본적인 내용을 공부를 했습니다. 쓰레드는 사용을 하는 것이 상당히…

6개월 ago

This website uses cookies.