How can we implement Flow API using Publisher-Subscriber in Java 9?

Flow API (java.util.concurrent.Flow) has introduced in Java 9. It helps to understand different ways in which the Publisher and Subscriber interfaces interact to perform desired operations.

Flow API consists of Publisher, Subscriber, Subscription, and Processor interfaces, which can be based on reactive stream specification.

In the below example, we can implement Flow API by using Publisher-Subscriber interfaces.

Example

import java.util.concurrent.Flow.Publisher;
import java.util.concurrent.Flow.Subscriber;
import java.util.concurrent.Flow.Subscription;

public class FlowAPITest {
   public static void main(String args[]) {
      <strong>Publisher<Integer></strong> publisherSync = new <strong>Publisher<Integer></strong>() {   <strong>// Create publisher</strong>
         <strong>@Override</strong>
         public void <strong>subscribe</strong>(Subscriber<? super Integer><!--? super Integer--> subscriber) {
            for(int i = 0; i < 10; i++) {
               System.out.println(Thread.currentThread().getName() + " | Publishing = " + i);
               subscriber.<strong>onNext</strong>(i);
            }
            subscriber.<strong>onComplete</strong>();
         }
      };
      <strong>Subscriber<Integer></strong> subscriberSync = new <strong>Subscriber<Integer></strong>() {   <strong>// Create subscriber</strong>
         <strong>@Override</strong>
         public void <strong>onSubscribe</strong>(Subscription subscription) {
         }
         <strong>@Override</strong>
         public void <strong>onNext</strong>(Integer item) {
            System.out.println(Thread.currentThread().getName() + " | Received = " + item);
            try {
               Thread.sleep(100);
            } catch(InterruptedException e) {
               e.printStackTrace();
            }
         }
         <strong>@Override</strong>
         public void <strong>onError</strong>(Throwable throwable) {
         }
         <strong>@Override</strong>
         public void <strong>onComplete()</strong> {
         }
      };
      publisherSync.<strong>subscribe</strong>(subscriberSync);
   }
}

Output

<strong>main | Publishing = 0
main | Received = 0
main | Publishing = 1
main | Received = 1
main | Publishing = 2
main | Received = 2
main | Publishing = 3
main | Received = 3
main | Publishing = 4
main | Received = 4
main | Publishing = 5
main | Received = 5
main | Publishing = 6
main | Received = 6
main | Publishing = 7
main | Received = 7
main | Publishing = 8
main | Received = 8
main | Publishing = 9
main | Received = 9</strong>
Updated on: 2020-04-14T10:31:19+05:30

2K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements