inflearn logo
강의

講義

知識共有

Kevinの分かりやすいRxJava 1部

リアクティブ演算子の概要と生成演算子

안녕하세요. 질문이 있습니다.

解決済みの質問

354

Mimorinn

投稿した質問数 1

1

이전 강의때도 궁금했던 거였는데 메인함수 마지막에 Thread.sleep()은 어떤 이유에서 필요한 건지 궁금합니다.

알려주실 수 있을까요...?

 

감사합니다.

Reactive Programming Reactive-Streams RxJava 함수형-프로그래밍

回答 1

0

Kevin

안녕하세요. 제가 강의에서 Thread.sleep( )에 대해서 설명을 했었을거라고 생각했는데 아마 설명을 빠뜨렸나 보네요.

간단하게 설명을 드리자면, 저희 강의 예제는 하나의 쓰레드에서 실행이 될 경우에는 모두 main 쓰레드에서 실행이 되는데 이 경우에는 단일 쓰레드에서 실행이 되기 때문에 Thread.sleep()을 붙일 필요가 없구요. 하나 이상의 쓰레드에서 실행이 되는 경우에만  Thread.sleep() 을 main 메서드 마지막에 추가합니다. 이유는 쓰레드의 특성상 main 쓰레드와 편의상 A라는 다른 쓰레드가 동시에 실행이 될 경우 A 쓰레드의 실행이 끝나기도 전에 main 쓰레드가 종료되기 때문인데요. 원활한 강의 진행을 위해서 Thread.sleep()을 이용하여 A라는 쓰레드의 실행이 끝나기전에 main 쓰레드가 종료되지 않고 딜레이 되도록 해줍니다.

아래 코드를 보시면,

public static void main(String[] args){
Logger.log("# start : " +TimeUtil.getCurrentTimeFormatted());

Observable.interval(1000L, TimeUnit.MILLISECONDS)
.map(num -> num + " count")
.subscribe(data -> Logger.log(LogType.ON_NEXT, data));

TimeUtil.sleep(3000);
}

위 예제 코드에서 TimeUtils.sleep(3000) 코드를 주석처리하고 실행 시키면 Observable.interval.. 코드가 실행이 되지 않습니다. 이유는 interval 연산자는 내부적으로 main 쓰레드가 아닌 Computation 쓰레드에서 실행이 되기 때문에 Observable.interval.. 코드가 실행이 되기도 전에 main 쓰레드가 종료되기 때문입니다.

위 코드의 실행 결과는 아래와 같은데요.

# start : 21:32:00.076 | main | 21:32:00.080

onNext() | RxComputationThreadPool-1 | 21:32:01.271 | 0 count

onNext() | RxComputationThreadPool-1 | 21:32:02.269 | 1 count

onNext() | RxComputationThreadPool-1 | 21:32:03.269 | 2 count

: 실행 결과를 보시면 "# start... " 문자열은 main 쓰레드에서 실행이 되지만 Observable.interval... 코드는 RxComputationThreadPool이라는 쓰레드에서 실행이 되는것을 볼 수 있습니다.

 

이해가 충분히 되셨나 모르겠네요. 다른 궁금한점이 있으시면 언제든지 편하게 질문주세요.

감사합니다.

0

Mimorinn

충분히 이해되었습니다.ㅎㅎ

 

친절히 설명해주셔서 감사드립니다.

Single과 관련해 여쭤보고 싶은 부분이 있습니다!

0

264

2

cold/hot publisher 예제 코드와 관련해 질문 드립니다.

0

363

1

CompletableObserver 클래스의 람다식 표현관련

0

297

1

1강에 예시로 보여주신 ToDoSample 코드에 관해 질문 드립니다!

0

356

1

데이터 결합 연산자 / merge 관련 질문

0

445

1

DROP 배압 전략에 관한 궁금증

0

300

2

map에서의 TimeUtil.sleep에 관한 궁금점

0

216

1

강의 내용을 정리해서 개인 블로그에 올려도 될까요?

0

562

2

TimeUtil.sleep 관련 질문

0

286

1

배압 전략 중에서 DROP 전략과 관련해서 질문 있습니다.

0

335

1

Error 발생 시에도 계속 처리 방법

0

689

2

선언형 프로그래밍과 명령형 프로그래밍

1

784

2

첫번째 강의 부터 이번강의까지 수강하면서 궁금한점 질문드립니다.

0

325

1

logger 가 없는데 util 폴더도 같이 갖다놔야 하나요?

0

327

1

amb 연산자

0

233

1

질문 드립니다.

0

219

1

concatEager( ) 연산자에 관하여

0

318

1

Reactive Streams의 구성요소들과 RxJava의 구성요소들의 관계?

1

397

2

ObservableSequenceEqualExample.java 예제의 delay( ) 연산자 질문있습니다

0

309

3

defer( ), fromFuture( )도 just( )처럼 여러 인자 값을 받을 수 있는지 궁금합니다.

0

264

3

flatMapSingle() 메소드에 대하여

0

620

6

fromFuture() vs fromCallable() 생성 연산자에 대해

0

573

2

함수형 인터페이스 Comparator에 대해

0

397

2

Publisher와 Subscriber 간의 프로세스 흐름에 대한 질문

1

340

3