Rx java 什么';共享()和发布()之间的区别是什么?

Rx java 什么';共享()和发布()之间的区别是什么?,rx-java,Rx Java,根据我的观点。我认为share()与publish().autoConnect()是一样的。但是在这段代码中,结果是不一样的 Observable<Integer> cold = Observable.create(subscriber -> { for (int i = 0; i <= 2; i++) { System.out.println("Hot Observable Emit " + i); sub

根据我的观点。我认为
share()
publish().autoConnect()
是一样的。但是在这段代码中,结果是不一样的

Observable<Integer> cold = Observable.create(subscriber -> {
        for (int i = 0; i <= 2; i++) {
            System.out.println("Hot Observable Emit " + i);
            subscriber.onNext(i);
        }
    });

    ConnectableObservable<Integer> connectble = cold.publish().autoConnect(2);
    //Obserable(Integer) connectavle = cold.share();
    connectble.subscribe(subscriber1);
    connectble.subscribe(subscriber2);
share()输出

Hot Observable Emit 0
Subscriber 1 : 0
Subscriber 2 : 0
....
Hot Observable Emit 0
Subscriber 1 : 0
//the subscriber2 not receive event
在这种情况下,我们不能在rx java中使用
share()
进行多播?我找到了一个合适的方法,但不适合这种情况

测试环境: oracle jdk1.8 rx java 1.2 IDEA ubuntu


                                         

它们的不同之处在于,当订阅者从
共享取消订阅时,上游断开连接;当新订阅者订阅时,上游源重新订阅并从头开始(如果冷)


自动连接
等待指定数量的订户,连接一次,并且在所有订户取消订阅时从不断开连接。下面是一个关于它如何工作的示例。

因此
share
可以用于
多播
。在这种情况下,我们为什么需要
share
publish()。RefCount()
。我是RxJava的初学者。您可以同时使用这两种方法进行多播,但是如果由于某种原因订阅者的数量变为1-0-1,则可以重新订阅源。但是从我的代码来看,为什么subscriber2不能接收事件。如果
共享
可以用于
多播
,subscriber2应该会接收事件。对不起,我不知道为什么这两个结果不一样。你能说出原因吗。当新订阅者订阅并且重新订阅上游源时。因此,当第一个订阅服务器订阅时,订阅服务器2无法接收事件?
share
连接到您的源,这将同步触发2元素循环,并且订阅服务器1接收两个事件。然后subscriber2订阅,但您的源在此之后不会发出任何消息,因此subscriber1或subscriber2都不会接收任何进一步的事件。