我用下面的任务试验,以让我的头周围RxJava的简单的例子:rxjava2 - 在一个线程池执行任务,订阅在单个线程
- 给出的URL列表
- 待办事项用于在线程池
- 对于每个结果每个URL一个HTTP请求中插入一些数据到SQLite数据库(这里没有多线程)
- 块中的方法,直到它完成
所以,我想它在科特林:
val ex = Executors.newFixedThreadPool(10)
Observable.fromIterable((1..100).toList())
.observeOn(Schedulers.from(ex))
.map { Thread.currentThread().name }
.subscribe { println(it + " " + Thread.currentThread().name }
我希望它打印
pool-1-thread-1 main
pool-1-thread-2 main
pool-1-thread-3 main
pool-1-thread-4 main
....
但是它打印:
pool-1-thread-1 pool-1-thread-1
pool-1-thread-1 pool-1-thread-1
pool-1-thread-1 pool-1-thread-1
任何人都可以纠正我关于如何工作的误解?为什么它不使用线程池的所有线程?我如何让我的订阅者在主线程上运行或阻塞直到完成?