Rxjava2實戰--第四章 Rxjava的線程操做

Rxjava2實戰--第四章 Rxjava的線程操做

1 調度器(Scheduler)種類

1.1 RxJava線程介紹

默認狀況下,java

1.2 Scheduler

Sheduler 做用
single 使用定長爲1的線程池(new ScheduledThread Pool(1)),重複利用這個線程
newThread 每次都啓用線程,並 在新線程中執行操做
computation 使用固定的線程池(Fixed Scheduler Pool),大小爲CPU核數,適用於CPU密集型計算
io 適合I/O操做(讀寫文件、讀寫數據庫、網絡信息交互等)所使用的Scheduler。行爲模式和newThread()差很少,區別在於io()的內部實現是用一個無數量上限的線程池,,能夠重用空閒的線程,所以多數狀況下,io()比newThread()更有效率
trampoline 表示當即執行,若是當前線程有任務在執行,則會將其暫停,等插入進來的新任務執行完成以後,再接着執行原先未完成的任務。
Scheduleres.from 將java.util.concurrent.Executor轉換成一個調度器實例, 便可以自定義一個Excutor來做爲調度器

2 RxJava線程模型

RxJava的被觀察者們在使用操做符時能夠利用線程調度器---Scheduler來切換線程。數據庫

2.1 線程調度器

2.2 線程調度

默認狀況下不作任何線程處理, Observable Observer 處於同一線程中。若是想要切換線 程,則能夠使用 subscribeOn()和 observeOn()。網絡

1 subscribeOn線程

subscribeOn 經過接收一個 Scheduler 參數,來指定對數據的處理運行在特定的線程調度器 Scheduler上。server

若屢次執行 subscribeOn ,則只有一次起做用 。對象

在RxJava 鏈式操做 中, 數據的處理是自下而上的 ,這點與數據發射正好相反。若是屢次 調用 subcribeOn(),則最上面的線程切換最晚 ,因此就變成了只有第一次切換線程纔有效。io

2 onbserveOntable

observeOn 一樣接收一個 Scheduler 參數 ,用來指定下游操做運行在特定的線程調度器 Scheduler 上。效率

若屢次執行 observeOn(),則每次都起做用 ,線程會一直切換。線程池

若下游屢次調用observeOn(),則線程會一直切換。每次切換線程,都會把對應的Observer對象的各個方法的處理執行在指定的線程中。

相關文章
相關標籤/搜索