Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Triển khai Flow API với Publisher-Subscriber trong Java 9


Flow API (java.util.concurrent.Flow) được giới thiệu trong Java 9. Nó giúp hiểu các cách khác nhau mà các interface Publisher và Subscriber tương tác để thực hiện các thao tác mong muốn.

Flow API bao gồm các interface Publisher, Subscriber, Subscription, và Processor, dựa trên đặc tả reactive stream.

Trong ví dụ dưới đây, chúng ta triển khai Flow API bằng cách sử dụng các interface Publisher-Subscriber.

Ví dụ

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

Kết quả

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