Posts RxJava - 스케쥴러의 종류(2)
Post
Cancel

RxJava - 스케쥴러의 종류(2)

스케쥴러(Scheduler)의 종류(2)

스케쥴러설명
Schedulers.trampoline()- 현재 실행되고 있는 쓰레드에 큐(Queue)를 생성하여 처리할 작업들을 큐에 넣고 순서대로 처리한다. => FIFO(First In First Out)
Schedulers.single()- 단일 쓰레드를 생성하여 처리 작업을 진핸한다.
- 여러번 구독해도 공통으로 사용한다.
Schedulers.from(executer)- Executor를 사용해서 생성한 쓰레들르 사용한다.
- RxJava의 Scheduler와 Executor의 동작 방식이 다르므로 자주 사용되지 않음

Schedulers.trampoline() 예제

  • 새로 쓰레드를 생성하지 않는다. 현재 실행되고있는 쓰레드에서 큐를 사용해서 쳐리한다.
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
28
29
/**
 * Schedulers.trampoline()을 이용하여 현재 실행되고 있는 쓰레드의 대기큐에 처리 작업을 등록하는 예제
 * - 대기 큐에 등록되는 순서대로 작업을 처리한다.
 */
public class SchedulerTrampolineExample {
    public static void main(String[] args) {
        Observable<String> observable = Observable.just("1", "2", "3", "4", "5");

        observable.subscribeOn(Schedulers.trampoline())
                .map(data -> "## " + data + " ##")
                .subscribe(data -> Logger.log(LogType.ON_NEXT, data));

        observable.subscribeOn(Schedulers.trampoline())
                .map(data -> "$$ " + data + " $$")
                .subscribe(data -> Logger.log(LogType.ON_NEXT, data));
    }
}
/*
onNext() | main | 00:35:10.992 | ## 1 ##
onNext() | main | 00:35:10.994 | ## 2 ##
onNext() | main | 00:35:10.994 | ## 3 ##
onNext() | main | 00:35:10.994 | ## 4 ##
onNext() | main | 00:35:10.994 | ## 5 ##
onNext() | main | 00:35:10.995 | $$ 1 $$
onNext() | main | 00:35:10.995 | $$ 2 $$
onNext() | main | 00:35:10.996 | $$ 3 $$
onNext() | main | 00:35:10.996 | $$ 4 $$
onNext() | main | 00:35:10.996 | $$ 5 $$
*/

Schedulers.single() 예제

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
public class SchedulerSingleExample {
    public static void main(String[] args) {
        Observable<String> observable = Observable.just("1", "2", "3", "4", "5");

        observable.subscribeOn(Schedulers.single())
                .map(data -> "## " + data + " ##")
                .subscribe(data -> Logger.log(LogType.ON_NEXT, data));

        observable.subscribeOn(Schedulers.single())
                .map(data -> "$$ " + data + " $$")
                .subscribe(data -> Logger.log(LogType.ON_NEXT, data));

        TimeUtil.sleep(300L);
    }
}
/*
onNext() | RxSingleScheduler-1 | 02:36:41.342 | ## 1 ##
onNext() | RxSingleScheduler-1 | 02:36:41.347 | ## 2 ##
onNext() | RxSingleScheduler-1 | 02:36:41.348 | ## 3 ##
onNext() | RxSingleScheduler-1 | 02:36:41.348 | ## 4 ##
onNext() | RxSingleScheduler-1 | 02:36:41.348 | ## 5 ##
onNext() | RxSingleScheduler-1 | 02:36:41.348 | $$ 1 $$
onNext() | RxSingleScheduler-1 | 02:36:41.348 | $$ 2 $$
onNext() | RxSingleScheduler-1 | 02:36:41.349 | $$ 3 $$
onNext() | RxSingleScheduler-1 | 02:36:41.349 | $$ 4 $$
onNext() | RxSingleScheduler-1 | 02:36:41.349 | $$ 5 $$
*/

이 글은 inflearn에 있는 Kevin의 알기 쉬운 RxJava 2부를 공부하고 작성한 글입니다.
강의영상 링크

This post is licensed under CC BY 4.0 by the author.

RxJava - 스케쥴러란? + 스케쥴러의 종류(1)

RxJava - 디버깅

Comments powered by Disqus.