我将使用线程执行程序对rxkotlin进行一些后台工作,将线程池大小固定为3,但是我的问题是在后台操作期间,它仅使用3个线程中的一个,这减慢了我的后台操作>
执行人班
class ThreadExe : Executor{
companion object {
private const val THREAD_POOL_SIZE = 3
}
private val executor: Executor =
Executors.newFixedThreadPool(THREAD_POOL_SIZE)
override fun execute(runnable: Runnable) {
executor.execute(runnable)
}
}
上面是我的执行者类,负责创建线程。
我将像下面这样称呼我的后台任务
getSomeDataFromNetworkProcessWithDB()
.subscribeOn(Schedulers.from(ThreadExe()))
.observeOn(AndroidSchedulers.mainThread())
.subscribe()
fun getSomeDataFromNetworkProcessWithDB() {
Observable.fromIteratable(someDataList())
.flatMap {
getSomeNetworkData()
}
.flatMap {
doSomeDbOperation()
}
}
我上面的代码的问题是所有这些网络和db操作都在同一个线程上按顺序工作,因为我们给了大小为3的线程池,它必须并行发送3个网络请求,但请求按顺序进行
谁能帮我解决这个问题?
答案 0 :(得分:1)
如果您希望单个操作在不同的线程上运行,请尝试以下操作:
getSomeDataFromNetworkProcessWithDB(Schedulers.from(ThreadExe()))
.observeOn(AndroidSchedulers.mainThread())
.subscribe()
fun getSomeDataFromNetworkProcessWithDB(scheduler: Scheduler): Observable<Data> {
return Observable.fromIterable(someDataList())
.flatMap {
getSomeNetworkData().subscribeOn(scheduler)
}
.flatMap {
doSomeDbOperation().subscribeOn(scheduler)
}
.subscribeOn(scheduler) // optional, if you want fromIterable(), someDataList() to run on this scheduler.
}