默認狀況下,java
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來做爲調度器 |
RxJava的被觀察者們在使用操做符時能夠利用線程調度器---Scheduler來切換線程。數據庫
默認狀況下不作任何線程處理, Observable Observer 處於同一線程中。若是想要切換線 程,則能夠使用 subscribeOn()和 observeOn()。網絡
1 subscribeOn線程
subscribeOn 經過接收一個 Scheduler 參數,來指定對數據的處理運行在特定的線程調度器 Scheduler上。server
若屢次執行 subscribeOn ,則只有一次起做用 。對象
在RxJava 鏈式操做 中, 數據的處理是自下而上的 ,這點與數據發射正好相反。若是屢次 調用 subcribeOn(),則最上面的線程切換最晚 ,因此就變成了只有第一次切換線程纔有效。io
2 onbserveOntable
observeOn 一樣接收一個 Scheduler 參數 ,用來指定下游操做運行在特定的線程調度器 Scheduler 上。效率
若屢次執行 observeOn(),則每次都起做用 ,線程會一直切換。線程池
若下游屢次調用observeOn(),則線程會一直切換。每次切換線程,都會把對應的Observer對象的各個方法的處理執行在指定的線程中。