Flow API trong Java 9 tương ứng với đặc tính Reactive Streams, một tiêu chuẩn de facto. Nó chứa một tập hợp các interface tối thiểu nắm bắt cốt lõi của xuất bản và đăng ký không đồng bộ.
Dưới đây là các interface chính của Flow API:
1) Flow.Publisher: Nó tạo ra các mục (items) cho các subscriber tiêu thụ, và chỉ chứa một phương thức: subscribe(Subscriber), mục đích của nó hiển nhiên.
Cú pháp
void subscribe(Flow.Subscriber<? super T> subscriber)
2) Flow.Subscriber: Nó đăng ký với các publisher (thường chỉ một) để nhận các mục (qua phương thức onNext(T)), thông báo lỗi (onError(Throwable)), hoặc tín hiệu không còn mục nào nữa (onComplete()). Trước khi những điều đó xảy ra, publisher gọi phương thức onSubscription(Subscription).
Cú pháp
void onSubscribe(Flow.Subscription subscription) void onNext(T item) void onError(Throwable throwable) void onComplete()
3) Flow.Subscription: Kết nối giữa một publisher và một subscriber. Subscriber có thể dùng nó để yêu cầu thêm mục (request(long)) hoặc ngắt kết nối (cancel()).
Cú pháp
void request(long n) void cancel()
Các bước thực thi Flow API:
- Đầu tiên, cần tạo một Publisher và một Subscriber.
- Đăng ký subscriber với Publisher::subscribe.
- Publisher tạo một Subscription và gọi Subscriber::onSubscription với nó, để subscriber có thể lưu subscription.
- Tại một thời điểm nào đó, subscriber gọi Subscription::request để yêu cầu một số lượng mục.
- Publisher bắt đầu chuyển các mục cho subscriber bằng cách gọi Subscriber::onNext. Nó không bao giờ xuất bản nhiều hơn số lượng mục được yêu cầu.
- Publisher có thể gặp sự cố và gọi Subscriber::onComplete hoặc Subscriber::onError.
- Subscriber có thể tiếp tục yêu cầu thêm mục hoặc ngắt kết nối bằng cách gọi Subscription::cancel.