Java 次刺激对受试者没有影响

Java 次刺激对受试者没有影响,java,android,rx-java,rx-java2,Java,Android,Rx Java,Rx Java2,据我了解, SubscribeOn操作符指定 可观测源应开始发射 如果链上有多个订阅,则第一个订阅 对整个流的影响 ObserveOn可用于随时将线程翻转到下游 点,当链中出现观测值时,它会更改 下游螺纹 但是我尝试了一个带有主题的示例,我发现SubscribeOn在整个链中没有效果 这是我的样品 Subject<String> mSubject = PublishSubject.create(); 从其他地方触发 mSubject.onNext

据我了解,

  • SubscribeOn
    操作符指定 可观测源应开始发射
  • 如果链上有多个
    订阅,则第一个订阅
    对整个流的影响
  • ObserveOn
    可用于随时将线程翻转到下游 点,当链中出现
    观测值时,它会更改
    下游螺纹
但是我尝试了一个带有
主题
的示例,我发现
SubscribeOn
在整个链中没有效果

这是我的样品

    Subject<String> mSubject = PublishSubject.create();
从其他地方触发

            mSubject.onNext("hello");
在这里您可以看到,我已经给出了
.subscribeOn(Schedulers.io())
,所以我希望

             mSubject
            .map(s -> "String :" + s)
            .doOnNext(s -> Log.d(TAG, "Started at Thread :" + Thread.currentThread().getName()))
            .flatMap(s -> Observable.just(1))
            .map(Object::toString)
直到这些命令在调度程序线程中执行。然后我使用
observeOn
将线程翻转到主线程。但是这里是这个代码的日志

              D/MainActivity: Started at Thread :main
              D/MainActivity: subscribed: 1 at main
为什么它没有在调度程序线程上启动

同样,我尝试使用正常的
可观察的
而不使用主题

             Observable.just("Hello")
            .map(s -> "String :" + s)
            .doOnNext(s -> Log.d(TAG, "Started at Thread :" + Thread.currentThread().getName()))
            .flatMap(s -> Observable.just(1))
            .map(Object::toString)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(s -> {
                Log.d(TAG, "subscribed: " + s + " at " + Thread.currentThread().getName());

            });
这是日志

             D/MainActivity: Started at Thread :RxCachedThreadScheduler-2
             D/MainActivity: subscribed: 1 at main
我可以看到它正在按预期工作

因此,这篇文章(由官方RxJava文档链接)中的主题发生了什么,它指出:

默认情况下,主题不跨线程执行任何同步。它们不采用调度程序,而是假定所有序列化和语法正确性都由主题的调用方处理


因此,据我所知,这意味着所使用的线程是调用
onNext()
的代码之一,然后被发送到观察到的线程。

我刚刚注意到我链接的文档是针对RxJS的。。。但是对于RxJava来说是有意义的(甚至比Javascript更重要,因为通常不使用线程)。主题没有订阅副作用,调用
Subject.onNext
的线程将是观察者接收值的线程。你也可以读到:@akarnokd读得很好,谢谢!
             D/MainActivity: Started at Thread :RxCachedThreadScheduler-2
             D/MainActivity: subscribed: 1 at main