फ्लो API जावा 9 के बाद से प्रतिक्रियाशील स्ट्रीम विनिर्देश के लिए आधिकारिक समर्थन है। यह Iterator दोनों का संयोजन है और पर्यवेक्षक पैटर्न। फ्लो एपीआई एक इंटरऑपरेशन विनिर्देश है और RxJava . की तरह एंड-यूज़र API नहीं है ।
फ्लो API चार बुनियादी इंटरफेस के होते हैं:
- सदस्य : सब्सक्राइबर कॉलबैक के लिए प्रकाशक की सदस्यता लेता है।
- प्रकाशक : प्रकाशक पंजीकृत ग्राहकों को डेटा आइटम की धारा प्रकाशित करता है।
- सदस्यता : प्रकाशक और ग्राहक के बीच की कड़ी।
- प्रोसेसर : प्रोसेसर प्रकाशक और सब्सक्राइबर के बीच बैठता है, और एक स्ट्रीम को दूसरी स्ट्रीम में बदल देता है।
नीचे दिए गए उदाहरण में, हमने एक बुनियादी ग्राहक बनाया है जो एक डेटा ऑब्जेक्ट मांगता है, उसे प्रिंट करता है और एक और मांगता है। हम जावा द्वारा प्रदान किए गए प्रकाशक कार्यान्वयन का उपयोग कर सकते हैं (सबमिशन प्रकाशक ) हमारा सत्र पूरा करने के लिए।
उदाहरण
import java.util.concurrent.Flow;
import java.util.List;
import java.util.concurrent.SubmissionPublisher;
class MySubscriber<T>implements Flow.Subscriber<T> {
private Flow.Subscription subscription;
@Override
public void onSubscribe(Flow.Subscription subscription) {
this.subscription = subscription;
this.subscription.request(1);
}
@Override
public void onNext(T item) {
System.out.println(item);
subscription.request(1);
}
@Override
public void onError(Throwable throwable) {
throwable.printStackTrace();
}
@Override
public void onComplete() {
System.out.println("Done");
}
}
// main class
public class FlowTest {
public static void main(String args[]) {
List<String> items = List.of("1", "2", "3", "4", "5", "6", "7", "8", "9", "10");
SubmissionPublisher<String> publisher = new SubmissionPublisher<>();
publisher.subscribe(new MySubscriber<>());
items.forEach(s -> {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
publisher.submit(s);
});
publisher.close();
}
} आउटपुट
1 2 3 4 5 6 7 8 9 10 Done