인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

식빵님의 프로필 이미지
식빵

작성한 질문수

Kevin의 알기 쉬운 RxJava 1부

리액티브 연산자 개요 및 생성 연산자

TimeUtil.sleep 관련 질문

해결된 질문

작성

·

225

0

리액티브 연산자 개요 및 생성 연산자 강의에서 질문 있습니다.

TimeUtil.sleep 과 관련된 질문입니다.

이와 관련된 질문이 이미 있었고, 해당 답변도 봤는데요.

(Q&A 링크 : https://inf.run/TUZc )

뭔가 제가 알던 쓰레드 동작 방식과 차이가 있어서 재질문합니다.

이미 답변 주신 글에서는 "이유는 interval 연산자는 내부적으로 main 쓰레드가 아닌 Computation 쓰레드에서 실행이 되기 때문에 Observable.interval.. 코드가 실행이 되기도 전에 main 쓰레드가 종료되기 때문입니다." 라고 답변을 주셨는데요. 

그런데 제가 알기로는 main 쓰레드와 별개로 동작하는 쓰레드가 있으면 애플리케이션이 종료되지 않는 걸로 알고 있습니다.

예를 들어서 아래와 같은 간단한 코드를 실행하면 바로 알 수 있습니다.

public static void main(String[] args) {
    System.out.println("main Start!");

    Thread thread = new Thread(() -> {
        try {
            Thread.sleep(3000);
            System.out.println("wow");
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
    });
    thread.start();

    System.out.println("main end");
}

 

 

실행해보면 main 쓰레드와 관련된 동작은 모두 끝나도 3초가 지나야만 프로세스가 종료됩니다. 

혹시 답변에서 주셨던 Computation 쓰레드는 혹시 Daemon 쓰레드인가요? 아니면 제가 놓치는 부분이 있는 건가요??

 

답변 1

1

Kevin님의 프로필 이미지
Kevin
지식공유자

안녕하세요?

말씀하셨던것처럼 Comptutation 쓰레드는 Daemon 쓰레드입니다.

이와 관련해서는 아래 링크들을 확인하시면 될 것 같습니다.

https://localcoder.org/when-using-schedulers-system-out-println-prints-nothing-in-rxjava

https://github.com/ReactiveX/RxJava/issues/3062

 

이 전의 다른 답변에서 구체적으로 설명을 드리지 못했던 감이 있긴하네요. 

 

다른 궁금한 점이나 의견있으시면 또 글 남겨주시면 감사드릴게요.

감사합니다.

 

식빵님의 프로필 이미지
식빵

작성한 질문수

질문하기