💊interval() 함수의 원형
@SchedulerSupport(SchedulerSupport.CUSTOM)
public static Observable<Long> interval(
long period, TimeUnit unit, Scheduler scheduler)
String[] orgs = {"1","3","5"};
Observable<String> source = Observable.fromArray(args)
.zipWith(Observable.interval(100L, TimeUnit.MILLISECONDS), (a,b) -> a);
//구독#1
source.map(item -> "<<" + item + ">>")
.subscrbieOn(Schedulers.computation())
.subscribe(Log::i);
//구독#2
source.map(item -> "##" + item + "##")
.subscrbieOn(Schedulers.computation())
.subscribe(Log::i);
CommonUtils.sleep(1000);
//결과값
RxComputationThreadPool-3 | value = <<1>>
RxComputationThreadPool-4 | value = ##1##
RxComputationThreadPool-3 | value = <<3>>
RxComputationThreadPool-4 | value = ##3##
RxComputationThreadPool-3 | value = <<5>>
RxComputationThreadPool-4 | value = ##5##
String[] orgs = {"1", "3", "5"};
Observable<String> source = Observable.fromArray(orgs);
//구독 #1
source subscribeOn(Schedulers.trampoline())
.map(data -> "<<" + data ">>")
.subscribe(Log::i);
//구독 #2
source.subscribeOn(Schedulers.trampoline())
.map(data -> "##" + data + "##")
.subscribe(Log::i)
CommonUtils.sleep(500);
//결과값
main | value = <<1>>
main | value = <<3>>
main | value = <<5>>
main | value = ##1##
main | value = ##3##
main | value = ##5##
👉🏻새로운 스레드를 생성하지 않고 main스레드에서 모든 작업을 실행
큐에 작업을 넣은 후 1개씩 꺼내어 동작하므로 첫 번째 구독과 두 번째 구독의 실행 순서가 바뀌는 경우는 없음
CommonUtils.exampleStart();
Observable<String> first = Observable.just(FIRST_URL)
.subscribeOn(Schedulers.io())
.map(OkHttpHelper::get);
Observable<String> second = Observable.just(SECOND_URL)
.subscribeOn(Schedulers.io())
.map(OkHttpHelper::get);
Observable.zip(first, second, (a,b) -> ("\n>> " + a + "\n>> " + b))
.subscribe(Log::it);
CommonUtils.sleep(5000);