스케쥴러(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부를 공부하고 작성한 글입니다.
강의영상 링크