RxJava:了解并发执行

时间:2018-07-31 09:39:46

标签: multithreading rx-java

在下面的示例中(科特琳,但基本原理相同)

fun main(args: Array<String>) {   
    val executor = Schedulers.from(Executors.newCachedThreadPool())

    Observable
        .fromIterable(1 until 1000)
        .observeOn(executor)
        .map {
            //1st block
            Thread.sleep((Math.random() * 100).toLong())
            Thread.currentThread().name + "-" + it
        }
        .map {
            //2nd block
            Thread.sleep((Math.random() * 100).toLong())
            it + "-" + UUID.randomUUID()
        }
        .subscribe(
            {
                println(it)
            },
            {
                it.printStackTrace()
            },
            {
                executor.shutdown()
            }
        )
}

我注意到以下内容:-

  1. 执行总是在同一线程上发生。
  2. 项目始终按顺序打印。

我的问题是:-

  1. 以强制性方式强制同步流的执行吗?如果我的元素彼此独立并且可以并行处理,该怎么办。
  2. 第一块和第二块无法同时执行不同的项目。

基本上,由于Rx链要同步项目处理,因此看起来它正在使用同一线程来处理所有项目。如果您的应用程序依赖于Rx,则这种方法无法达到多线程的目的。据说Rx与底层并发实现无关。我有可能使用错误的方式吗?

0 个答案:

没有答案