해결된 질문
작성
·
336
·
수정됨
1
안녕하세요. 선생님
join()
강의를 듣다가 11:09
내용 [join() 작동 방식] 관련해서 질문이 생겨서 질문을 남기게 되었습니다!
해당 페이지 첫번째 줄에 의하면 join()
을 실행하면 현재 스레드는 대기 상태가 되고 join()을 수행중인 스레드
에게 CPU를 사용하도록 한다라고 말씀 해주셨는데요.
여기서 말씀을 해주신대로라면 join()을 수행중인 스레드
가 바로 RUNNING
상태가 되면서 CPU를 할당받는 것인가요?
아니면 그냥 스케줄러에 의해서 RUNNABLE
상태에 있던 join()을 수행중인 스레드
가 자기 차례가 되어서 RUNNING
상태가 되는 것인지 궁금합니다.
현재 스레드가 자신의 차례를 join()을 수행중인 스레드
에게 양보를 함으로써 join()을 수행중인 스레드
가 즉시 실행
이 되도록 하는것인지, 아니면 현재 스레드가 자신의 차례를 그냥 넘기게 되고 join()을 수행중인 스레드
는 OS 스케줄러에 의해서 추후에 실행
이 된 것인지 의문이 들어서 여쭤보게 되었습니다.
5번째 내용을 보면 join()을 수행중인 스레드
에게 인터럽트가 발생할 경우, 현재 스레드는 대기에서 해제되고 실행상태로 전환되어 예외를 처리한다고 되어있습니다.join()을 수행중인 스레드
에게 인터럽트가 발생하는 것이 아니라 현재 스레드에게 인터럽트가 발생해야 현재 스레드가 대기에서 해제되고 실행상태가 되어서 예외를 처리하는게 아닌지 궁금합니다.30:00
내용을 보면 Main 스레드에게 인터럽트를 걸어야 대기에서 빠져나온다고 말씀을 해주셨습니다.
1번 질문과 결이 비슷한 질문입니다.join()
을 해제시키기 위해서 특정 스레드에게 인터럽트를 걸게 되면 해당 스레드는 WAITING
상태에서 RUNNING
상태로 바로 가는 것이 아니라, RUNNABLE
상태로 바뀐 후 자신의 차례에 RUNNING
이 된다고 이해를 하면 되는 것일까요 ??
답변 1
2
네
질문 내용을 보고 join() 을 호출한 스레드와 호출 대상 스레드의 정의가 명확하지 못한 부분이 있어서 자료 교재 및 강의 영상을 새롭게 업데이트 해서 적용했습니다.
강의를 다시 한번 참고해 주시면 좋겠습니다.
1번 질문
join() 을 수행중인 스레드가 대기에 빠지는 것이 맞습니다. 즉 join() 을 호출하는 스레드가 대기에 빠지게 되고 호출대상 스레드는 계속 작업을 진행하게 되고 작업이 완료하게 되면 join() 을 호출한 스레드가 대기에서 해제되고 실행대기 상태로 전환이 됩니다. 그리고 CPU 에 의해 최종 할당받게 되면 실행상태가 됩니다.
2번 질문
join() 을 수행중인 스레드를 join() 을 호출한 스레드라고 이해하시면 됩니다. 그래서 어떤 스레드가 join() 을 호출한 스레드에게 인터럽트를 걸게 되면 해당 스레드가 대기에서 해제되고 예외를 처리하게 됩니다.
3번 질문
네 맞습니다.
대기에서 해제된다고 해서 바로 Running 상태로 전환되지 않고 Runnable 상태에서 Running 상태로 가게 됩니다.
Running 상태는 언제든지 Runnable 상태에서만 전환됩니다. 대기나 블록에서 바로 Running 상태로 갈수 없습니다.