RxJava中blockingSubscribe的作用
RxJava中blockingSubscribe的作用是阻塞主线程,直到前面流式代码中的工作完成。举两个例子就可以看出其中的区别了。
使用blockingSubscribe
Log.d("======", "Before blockingSubscribe");
Log.d("======", "Before Thread: " + Thread.currentThread());
Flowable.range(1, 6)
.subscribeOn(Schedulers.newThread())
.map(v -> {
Log.d("======", "" + v);
TimeUnit.MILLISECONDS.sleep(1000);
Log.d("======", Thread.currentThread().toString());
return v;
}
).blockingSubscribe();
Log.d("======", "After blockingSubscribe");
Log.d("======", "After Thread: " + Thread.currentThread());
其打印结果为:
D/======: Before blockingSubscribe
D/======: Before Thread: Thread[main,5,main]
D/======: 1
D/======: Thread[RxNewThreadScheduler-1,5,main]
D/======: 2
D/======: Thread[RxNewThreadScheduler-1,5,main]
D/======: 3
D/======: Thread[RxNewThreadScheduler-1,5,main]
D/======: 4
D/======: Thread[RxNewThreadScheduler-1,5,main]
D/======: 5
D/======: Thread[RxNewThreadScheduler-1,5,main]
D/======: 6
D/======: Thread[RxNewThreadScheduler-1,5,main]
D/======: After blockingSubscribe
D/======: After Thread: Thread[main,5,main]
使用其他的subscribe
Log.d("======", "Before blockingSubscribe");
Log.d("======", "Before Thread: " + Thread.currentThread());
Flowable.range(1, 6)
.subscribeOn(Schedulers.newThread())
.map(v -> {
Log.d("======", "" + v);
TimeUnit.MILLISECONDS.sleep(1000);
Log.d("======", Thread.currentThread().toString());
return v;
}
).subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Throwable {
}
});
Log.d("======", "After blockingSubscribe");
Log.d("======", "After Thread: " + Thread.currentThread());
其打印结果为:
D/======: Before blockingSubscribe
D/======: Before Thread: Thread[main,5,main]
D/======: After blockingSubscribe
D/======: After Thread: Thread[main,5,main]
D/======: 1
D/======: Thread[RxNewThreadScheduler-1,5,main]
D/======: 2
D/======: Thread[RxNewThreadScheduler-1,5,main]
D/======: 3
D/======: Thread[RxNewThreadScheduler-1,5,main]
D/======: 4
D/======: Thread[RxNewThreadScheduler-1,5,main]
D/======: 5
D/======: Thread[RxNewThreadScheduler-1,5,main]
D/======: 6
D/======: Thread[RxNewThreadScheduler-1,5,main]