Flow API (java.util.concurrent.Flow) ถูกแนะนำใน Java 9 ช่วยเข้าใจวิธีต่างๆ ที่ Publisher และ Subscriber อินเทอร์เฟซโต้ตอบเพื่อทำงานที่ต้องการ
Flow API ประกอบด้วยอินเทอร์เฟซ Publisher, Subscriber, Subscription, และ Processor ซึ่งพัฒนาตาม reactive stream specification
ในตัวอย่างด้านล่าง เราจะนำ Flow API ไปใช้ด้วย Publisher-Subscriber interfaces:
ตัวอย่าง
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 publisherSync = new Publisher() {
// 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 subscriberSync = new Subscriber() {
// 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);
}
}
ผลลัพธ์
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