RxJava2, RxAndroid2

[RxJava2] 스케줄러 Schedulers

알통몬_ 2018. 10. 2. 14:42
반응형


공감 및 댓글은 포스팅 하는데

 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 

도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 

만들어 나가겠습니다^^

 



이번 포스팅부터는 스케줄러에 대해서 공부합니다.


이전까지의 포스팅에서 예제들의 공통점은 대부분 main 스레드에서

동작한다는 것이었는데요.

실무에서 사용할 때는 요구사항에 맞게 비동기로 동작할 수 있도록

바꿔야겠죠?

이 때 스케줄러를 사용합니다.

스케줄러

스레드를 지정할 수 있게 해줍니다.


예제)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package rx.java.chapter05;
 
import io.reactivex.Observable;
import io.reactivex.schedulers.Schedulers;
 
public class SchedulerEx {
 
    public static void main(String[] args) {
 
        String[] names = {"Thomas""Tommy""Tom"};
        
        Observable<String> src = Observable.fromArray(names)
                .doOnNext(str -> System.out.println(Thread.currentThread().getName() + " =>" + str))
                .subscribeOn(Schedulers.newThread())
                .observeOn(Schedulers.newThread());
        src.subscribe(str -> System.out.println(Thread.currentThread().getName() + " =>" + str));
        
        try {
            Thread.sleep(1000);
        } catch (Exception e) {
            // TODO: handle exception
        }
        
    }
 
}
 
cs

예제를 보면 이전까지 보지못했던 subscribeOn 과 observeOn이 보입니다.


subscribeOn() 

구독자가 Observable에 subscribe() 함수를 호출해 구독할 때 

실행되는 스레드를 지정합니다.


ObserveOn()

Observable에서 생성한 데이터 흐름이 여러 함수를 거치며 처리될 때

동작이 어느 스레드에서 일어나는지 지정함.

위에서 두 함수에 사용된 인자 Schedulers.newThread() 는

새로운 스레드를 생성한다는 의미를 가집니다.


위에제를 돌려보면 doOnNext() 와 subscribe()가 각각 다른 스레드에서

실행됨을 알 수 있습니다.

만약 observeOn()을 주석처리하면 모두 같은 스레드에서 실행됩니다.


다음 포스팅에서는 스케줄러의 종류와 사용방법에 대해 공부합니다.

이상입니다.

반응형