ConnectableObservable’s refCount method

In this post I will explain “refCount” method with an example.

In my previous posts under RxJava, I explained about ConnectableObservable’s “autoConnect” method. This method is similar to “autoConnect” method.

By calling refCount is nothing but calling autoConnect and passing 1 as an argument.


    Observable<Long> observable = Observable.interval(1, TimeUnit.SECONDS);
    observable = observable.publish().refCount();

is similar to


    Observable<Long> observable = Observable.interval(1, TimeUnit.SECONDS);
    observable = observable.publish().autoConnect(1);

So by calling “refCount” in the above code, we are telling the Hot Observable “observable” to start emitting items, the moment one Observer subscribes to it.

Below is the complete code for your reference

Main Class


1  import java.util.concurrent.TimeUnit;
2  
3  import io.reactivex.rxjava3.core.Observable;
4  
5  public class Example16 {
6      public static void main(String[] args) throws Exception {
7          Observable<Long> observable = Observable.interval(1, TimeUnit.SECONDS);
8          observable = observable.publish().refCount();
9          System.out.println("Observer1 Subscribed");
10         observable.subscribe((t) -> System.out.println("Observer1: " + t));
11         Thread.sleep(5000);
12         System.out.println("Observer2 Subscribed");
13         observable.subscribe((t) -> System.out.println("Observer2: " + t));
14         Thread.sleep(5000);
15         System.out.println("Observer3 Subscribed");
16         observable.subscribe((t) -> System.out.println("Observer3: " + t));
17         Thread.sleep(5000);
18     }
19 }

Below is the output

Output

Observer1 Subscribed
Observer1: 0
Observer1: 1
Observer1: 2
Observer1: 3
Observer2 Subscribed
Observer1: 4
Observer1: 5
Observer2: 5
Observer1: 6
Observer2: 6
Observer1: 7
Observer2: 7
Observer1: 8
Observer2: 8
Observer1: 9
Observer2: 9
Observer3 Subscribed
Observer1: 10
Observer2: 10
Observer3: 10
Observer1: 11
Observer2: 11
Observer3: 11
Observer1: 12
Observer2: 12
Observer3: 12
Observer1: 13
Observer2: 13
Observer3: 13
Observer1: 14
Observer2: 14
Observer3: 14

As you can see from the above output, the moment Observer1 subscribes, the Observable starts emitting items.

Leave a Reply