Rxjava2 blockingSubscribe vs подписаться - PullRequest
0 голосов
/ 10 января 2019

Я прочитал объяснение о blockingSubscribe() и subscribe(), но ни я не могу написать, ни найти пример, чтобы увидеть разницу между ними. Кажется, что оба они работают одинаково. Может ли кто-нибудь привести пример этих 2, желательно на Java.

1 Ответ

0 голосов
/ 10 января 2019

blockingSubscribe блокирует текущий поток и обрабатывает в нем несвязанные события. Вы можете увидеть это, запустив некоторый асинхронный источник:

System.out.println("Before blockingSubscribe");
System.out.println("Before Thread: " + Thread.currentThread());

Observable.interval(1, TimeUnit.SECONDS)
.take(5)
.blockingSubscribe(t -> {
     System.out.println("Thread: " + Thread.currentThread());
     System.out.println("Value:  " + t);
});

System.out.println("After blockingSubscribe");
System.out.println("After Thread: " + Thread.currentThread());

subscribe не дает такого ограничения и может работать в произвольных потоках:

System.out.println("Before subscribe");
System.out.println("Before Thread: " + Thread.currentThread());

Observable.timer(1, TimeUnit.SECONDS, Schedulers.io())
.concatWith(Observable.timer(1, TimeUnit.SECONDS, Schedulers.single()))
.subscribe(t -> {
     System.out.println("Thread: " + Thread.currentThread());
     System.out.println("Value:  " + t);
});


System.out.println("After subscribe");
System.out.println("After Thread: " + Thread.currentThread());

// RxJava uses daemon threads, without this, the app would quit immediately
Thread.sleep(3000);

System.out.println("Done");
...