Java 并行执行的可观测值

Java 并行执行的可观测值,java,reactive-programming,rx-java,reactivex,Java,Reactive Programming,Rx Java,Reactivex,我用reactiveX Zip做了一些实验,我注意到我在Zip中定义的观察对象是一个接一个顺序执行的。我认为zip的好处在于,zip中定义的每个可观察对象都是由一个线程执行的,所以它们都是并行执行的。有没有办法达到我想要的?。 这是我的zip示例 @Test public void testZip() { Observable.zip(obString(), obString1(), obString2(), (s, s2, s3) -> s.concat(s2)

我用reactiveX Zip做了一些实验,我注意到我在Zip中定义的观察对象是一个接一个顺序执行的。我认为zip的好处在于,zip中定义的每个可观察对象都是由一个线程执行的,所以它们都是并行执行的。有没有办法达到我想要的?。 这是我的zip示例

         @Test
public void testZip() {
    Observable.zip(obString(), obString1(), obString2(), (s, s2, s3) -> s.concat(s2)
                                                                     .concat(s3))
              .subscribe(System.out::println);
}

public Observable<String> obString() {
    System.out.println(Thread.currentThread().getId());
    return Observable.just("hello");
}

public Observable<String> obString1() {
    System.out.println(Thread.currentThread().getId());
    return Observable.just(" world");
}

public Observable<String> obString2() {
    System.out.println(Thread.currentThread().getId());
    return Observable.just("!");
}
@测试
公共void testZip(){
Observable.zip(obString(),obString1(),obString2(),(s,s2,s3)->s.concat(s2)
康卡特先生(s3))
.subscribe(System.out::println);
}
公共可观测obString(){
System.out.println(Thread.currentThread().getId());
返回可见。只是(“你好”);
}
公共可观测obString1(){
System.out.println(Thread.currentThread().getId());
可观察的回报。公正(“世界”);
}
公共可观测obString2(){
System.out.println(Thread.currentThread().getId());
可观察的返回。仅(“!”);
}

你看错了东西

obString*
都在同一个线程上执行,因为它们是在
testZip
中调用它们时执行的

您要查看的是可观察对象中发生的情况,这不可能简单地使用
just
,您需要一个自定义的可观察对象,并查看订阅
主体中的当前线程

另外,您可能希望使用
scheduleOn
为您的
Observable
提供一个特定的新线程或线程池