강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

김규영님의 프로필 이미지
김규영

작성한 질문수

자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]

join()

13:00 강의 내용 이해 질문

작성

·

66

0

즉, 메인스레드가 하나의 스레드가 아닌 여러개 스레드 각 스레드마다 조인을 걸 수 있겠죠. 조인을 겁니다. 각스레드의 작업이 끝나게될때까지 메인 스레드는 계속 대기하게되겠죠 각 스레드가 작업이 종료되면 그 때 메인 스레드는 대기에서 빠져나오지만 나머지 스레드가 다시 모든 작업이 종료될 때 까지는 대기해야되겠죠?

라고 하시면서 실행을 재개하는 흐름을 반복한다. 라는 4번 내용을 읽었습니다.

 

즉, 저 설명 내용이 각 스레드가 join 이 걸려서 join 이 걸린 스레드들이 작업이 종료되면 그 때 메인스레드는 대기 즉, wait 상태에서 나오고 runnable 상태가 되는거라고 이해했습니다.

그런데 다음 설명에서

스레드는 대기에서 빠져나오지만 나머지 스레드가 다시 모든 작업이 종료될 때 까지는 대기해야되겠죠? 라는 설명이 이해가 잘 안가는데요

각 스레드가 종료됨에따라 메인스레드가 대기에서 빠져 runnable 상태가 되지만... 나머지 스레가 다시 모든 작업이 종료될때까지 대기????? ...

이미 메인을 제외한 모든 스레드들이 작업이 끝났는데 어떻게 또 종료될때까지 대기하는거죠? 이전 강의에서 한번 사용한 스레드는 재사용이 불가능하다고 하셨습니다

 

답변 1

0

안녕하세요, 김규영님. 인프런 AI 인턴입니다.

질문 주신 내용은 자바의 join() 메서드를 이용한 스레드의 흐름 관리에 관한 것 같습니다. join() 메서드는 호출한 스레드가 대상 스레드의 작업이 완료될 때까지 대기하는 메커니즘입니다.

이해를 돕기 위해 간단하게 정리해보겠습니다:

  1. join()의 역할: 메인 스레드가 어떤 스레드에 대해 join()을 호출하면, 해당 스레드가 종료될 때까지 메인 스레드는 대기(waiting 상태)합니다.

  2. 여러 스레드의 join(): 메인 스레드가 여러 개의 스레드에 대해 join()을 호출할 수 있으며, 이 경우 각 스레드가 종료될 때마다 메인 스레드는 그 스레드에 대한 대기 상태에서 벗어나게 됩니다.

  3. 설명의 핵심: “스레드는 대기에서 빠져나오지만 나머지 스레드가 다시 모든 작업이 종료될 때까지 대기해야 된다”라는 부분은 각 스레드마다 join()을 호출하여 메인 스레드를 대기하게 하면, 한 스레드의 종료로 대기에서 빠져나오더라도 앞서 다른 스레드에 대한 join()이 계속 진행 중이라면 메인 스레드는 또다시 대기 상태에 놓이게 됩니다.

비유적으로 설명하자면, 메인 스레드는 여러 개의 문(스레드)을 지나야 하는데, 각 문은 그 문의 소유자(스레드)가 문을 열기 전까지는 잠겨 있습니다. 각 문이 열리고 메인 스레드가 통과할 때마다 다른 잠긴 문에 도달하여 또 기다려야 합니다.

참고할만한 기존 질문

질문하신 내용을 요약하자면, 모든 스레드의 종료를 기다리기 위해 각 스레드에 대해 join()을 걸 수 있으며, 메인 스레드는 대기와 실행을 반복하게 됩니다. 아직 명확하지 않으시다면, 관련 참조 자료를 확인해보시고 추가 궁금한 점이 있으면 언제든지 질문해 주세요.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

김규영님의 프로필 이미지
김규영

작성한 질문수

질문하기