欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > java >内容正文

java

RxJava系列(二)Scheduler线程调度器

发布时间:2025/3/17 java 41 豆豆
生活随笔 收集整理的这篇文章主要介绍了 RxJava系列(二)Scheduler线程调度器 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

2019独角兽企业重金招聘Python工程师标准>>>

#RxJava线程调度器

##Scheduler简介:

在不指定线程的情况下,RxJava遵循的是线程不变原则,也就是说在哪个线程调用subscribe(),就在哪个线程产生事件,在哪个线程产生时间,就在哪个线程消费事件,如果想要在产生事件或者是消费事件的时候切换线程,那么就得用到今天要说的线程调度器Scheduler

在RxJava中Scheduler就相当于线程控制器,RxJava通过它来指定每一段代码应该运行在什么样的线程中

##Scheduler分类:

目前RxJava给我们提供了四种不同类型的线程调度器。以方便我们使用

  • Scheduler.immediate():(默认的Scheduler)直接在当前线程运行、相当于不指定线程
  • Scheduler.newThread():总是启用新的线程,并运行在新线程中
  • Scheduler.io():I/O 操作(读写文件、读写数据库、网络信息交互等)所使用的 Scheduler。行为模式和 newThread() 差不多,区别在于 io() 的内部实现是用一个无数量上限的线程池,可以重用空闲的线程,因此多数情况下 io() 比 newThread() 更有效率。不要把计算工作放在 io() 中,可以避免创建不必要的线程。
  • Scheduler.computation():计算所使用的 Scheduler。这个计算指的是 CPU 密集型计算,即不会被 I/O 等操作限制性能的操作,例如图形的计算。这个 Scheduler 使用的固定的线程池,大小为 CPU 核数。不要把 I/O 操作放在 computation() 中,否则 I/O 操作的等待时间会浪费 CPU

在RxAndroid中还有一个专用的AndroidSchedulers.mainThread(),它所指定的操作将在主线程中运行

##Scheduler的用法:

可以使用 subscribeOn()observeOn() 两个方法来对线程进行控制了。subscribeOn(): 指定Observable(被观察者)所在的线程,或者叫做事件产生的线程。 * observeOn(): 指定 Observer(观察者)所运行在的线程,或者叫做事件消费的线程。

Observable.create(new ObservableOnSubscribe<Integer>() {[@Override](https://my.oschina.net/u/1162528)public void subscribe(ObservableEmitter<Integer> e) throws Exception {Log.d("所在的线程:",Thread.currentThread().getName());Log.d("发送的数据:", 1+"");e.onNext(1);}}).subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) /.subscribe(new Consumer<Integer>() {[@Override](https://my.oschina.net/u/1162528)public void accept(Integer integer) throws Exception {Log.d("所在的线程:",Thread.currentThread().getName());Log.d("接收到的数据:", "integer:" + integer);}});

###感谢知行办公团队同事的帮助

  • 【总监】十二春秋之,3483099@qq.com;
  • 【Master】zelo,616701261@qq.com;
  • 【运营】运维艄公,897221533@qq.com;
  • 【产品设计】流浪猫,364994559@qq.com;
  • 【体验设计】兜兜,2435632247@qq.com;
  • 【iOS】淘码小工,492395860@qq.com;iMcG33K,imcg33k@gmail.com;
  • 【Android】人猿居士,1059604515@qq.com;思路的顿悟,1217022114@qq.com;
  • 【java】首席工程师MR_W,feixue300@qq.com;
  • 【测试】土镜问道,847071279@qq.com;
  • 【数据】喜乐多,42151960@qq.com;
  • 【安全】保密,你懂的。

转载于:https://my.oschina.net/u/2561871/blog/1537411

总结

以上是生活随笔为你收集整理的RxJava系列(二)Scheduler线程调度器的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。