Java 并行执行的可观测值
我用reactiveX Zip做了一些实验,我注意到我在Zip中定义的观察对象是一个接一个顺序执行的。我认为zip的好处在于,zip中定义的每个可观察对象都是由一个线程执行的,所以它们都是并行执行的。有没有办法达到我想要的?。 这是我的zip示例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)
@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
提供一个特定的新线程或线程池