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线程调度器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端笔试题面试题记录(下)
- 下一篇: 前端日刊君来也