在 Retrofit
网络请求中使用 Schedulers.newThread()
vs Schedulers.io()
有什么好处 . 我见过很多使用 io()
的例子,但我想了解原因 .
示例情况:
observable.onErrorResumeNext(refreshTokenAndRetry(observable))
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())...
VS
observable.onErrorResumeNext(refreshTokenAndRetry(observable))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())...
我见过的原因之一是 -
newThread()
为每个工作单元创建一个新线程 . io()
将使用线程池
但是这个论点对应用程序的影响是什么?还有什么其他方面?
1 回答
你是正确的,使用
Schedulers.io()
的好处在于它使用线程池,而Schedulers.newThread()
则没有 .您应该考虑使用线程池的主要原因是它们维护了一些空闲且等待工作的预创建线程 . 这意味着当您完成工作时,您不需要经历创建线程的开销 . 完成工作后,该线程也可以重新用于将来的工作,而不是不断创建和销毁线程 .
线程创建起来可能很昂贵,因此最大限度地减少动态创建的线程数通常很好 .
有关线程池的更多信息,我建议:
What is the use of a Thread pool in Java?
What is a thread pool?
Thread pool pattern (Wikipedia)