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

미믹님의 프로필 이미지
미믹

작성한 질문수

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

사용자 스레드 vs 데몬 스레드

사용자 스레드 vs 데몬 스레드 강의에서요

작성

·

247

0

메인스레드는 어플리케이션을 실행하는 최초의 스레드이자 어플리케이션 실행을 완료하는 마지막 스레드의 역할을 한다 고 되어있는데

제공해주신 예제 코드 chaper02 의 exam02 MultiThreadAppTerminatedExample 를 실행 시켜보면

 

메인스레드 종료가 먼저 출력 된뒤 다른 스레드들이 실행 중 이라고 출력 됩니다.

그러면 예제 코드에서 System.out.println("메인 스레드 종료"); 가 호출 된 뒤 실제로는 메인 쓰레드가 종료되지는 않고

다른 스레드들이 다 종료 될 때 까지 대기 중인 상태 인가요?

답변 1

0

정수원님의 프로필 이미지
정수원
지식공유자

메인 스레드가 종료되지 않는 것이 아니라 어플리케이션이 종료되지 않은 것이라고 보시면 됩니다.

" 메인스레드는 어플리케이션을 실행하는 최초의 스레드이자 어플리케이션 실행을 완료하는 마지막 스레드의 역할을 한다 " 의 의미는 비동기가 아닌 동기적 실행 흐름에서의 의미를 설명한 것이라고 보면 됩니다.

메인 스레드가 다른 모든 스레드가 종료될 때 까지 대기하는 것(예를 들면 join(), sleep()) 이 아니라면 메인 스레드는 자기의 역할을 수행하고 종료하게 되고 JVM 자체는 모든 스레드가 종료되면 데몬스레드를 강제로 종료시키고 JVM 도 최종 종료하게 됩니다

그래서 메인 스레드는 대기를 위한 별도의 API 를 호출하지 않는다면 대기하지 않고 종료됩니다.

미믹님의 프로필 이미지
미믹

작성한 질문수

질문하기