• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

TimeUtil.sleep 관련 질문

22.05.15 14:39 작성 조회수 174

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

안녕하세요?

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

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

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

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

 

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

 

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

감사합니다.