2017-06-19 56 views
0

根據this question,Schedulers.io()將創建無限數量的線程。在我的應用程序中,這是一個問題,因爲我需要完成數百個不同步的任務。我可以更改RxJava中Schedulers.io()的行爲嗎?

註釋中的建議是使用Scheduler.from(Executors.newFixedThreadPool(n)),這是合理的,但使用模式是不同的,以Schedulers.io()

  • 隨着Schedulers.io(),我可以重新使用相同的線程池通了我應用程序,Rx將爲我正確呼叫shutdown
  • 隨着Scheduler.from(Executors.newFixedThreadPool(n)),我必須使Scheduler可用於我的應用程序,並記得致電shutdown

問題:

  • 可我只是調整的Schedulers.io()的行爲,以使用有界線程池?
  • 通過Rx應用程序對Scheduler進行線程化並確保其正確地爲shutdown的建議方法是什麼?
+0

也許['Schedulers.computation()'](http://reactivex.io/RxJava/javadoc/rx/schedulers/Schedulers.html#computation())是你在找什麼 – Lamorak

回答

0

對於RxJava,您可以使用RxJavaHooks.onIOScheduler來回報您的SchedulerSchedulers.io。但是你不能避免IOScheduler被創建。

對於RxJava2,您可以使用RxJavaPlugins.setInitIoSchedulerHandler直接通過Scheduler初始化IOScheduler

+0

你能舉一個例子'setInitIoSchedulerHandler'?該API不是我所期望的。 – sdgfsdh

+1

@sdgfsdh使用'RxJavaPlugins.setInitIoSchedulerHandler(c - > mySchedler);'在Schedulers初始化之前將'myScheduler'設置爲'IOScheduler'。 –

+0

'c'是什麼?我是否需要稍後在代碼中處理'myScheduler'? – sdgfsdh

相關問題