RXJava share()无法与Observable.create()一起使用

RXJava share()无法与Observable.create()一起使用,java,rx-java,Java,Rx Java,此代码 public class ConnectObs { public static void main(String[] args) { Observable<Integer> intsObservable = Observable.just(1, 2); intsObservable = intsObservable.share(); intsObservable.subscribe(s->System.out.println("A " + s

此代码

public class ConnectObs {
public static void main(String[] args) {

    Observable<Integer> intsObservable = Observable.just(1, 2);
    intsObservable = intsObservable.share();

    intsObservable.subscribe(s->System.out.println("A " + s));
    intsObservable.subscribe(s->System.out.println("B " + s));

    intsObservable  = Observable.create(s -> {
        s.onNext(1);
        s.onNext(2);
    });
    intsObservable = intsObservable.share();

    intsObservable.subscribe(s->System.out.println("C " + s));
    intsObservable.subscribe(s->System.out.println("D " + s));
  }
}

Observable.just
和您的自定义Observable(顺便说一句,它不是安全构建的)之间的重要区别在于您没有完成流,因此当
D
订阅发生时,
C
订阅仍然处于活动状态,所以
D
只是等待更多没有出现的排放

您的创建应如下所示:

Observable.<Integer> create(s -> {
        s.onNext(1);
        s.onNext(2);
        s.onCompleted();
})
//prevent MissingBackpressureException
.onBackpressureBuffer();
Observable.<Integer> create(s -> {
        s.onNext(1);
        s.onNext(2);
        s.onCompleted();
})
//prevent MissingBackpressureException
.onBackpressureBuffer();
Observable.<Integer> create(s -> {
        s.onNext(1);
        if (!s.isUnsubscribed())
            s.onNext(2);
        if (!s.isUnsubscribed())
            s.onCompleted();
}).onBackpressureBuffer();