자바 9 반응 스트림 생성 지원 몇 가지 인터페이스 도입:게시자 , 구독자 , 구독 및 SubmissionPublisher 게시자 를 구현하는 클래스 상호 작용. 각 인터페이스는 반응성 원칙에 따라 다른 역할을 할 수 있습니다. 스트림 .
구독자 를 사용할 수 있습니다. 게시자가 게시하는 데이터를 구독하기 위한 인터페이스 . 구독자 를 구현해야 합니다. 인터페이스를 제공하고 추상 메서드에 대한 구현을 제공합니다.
Flow.Subscriber 인터페이스 메소드:
- onComplete(): 이 메서드는 게시자 개체가 역할을 완료할 때 호출되었습니다.
- onError(): 이 메소드는 Publisher에서 문제가 발생했을 때 호출되어 구독자에게 알립니다.
- onNext(): 이 메서드는 게시자가 모든 구독자에게 통지할 새 정보를 가질 때마다 호출됩니다.
- onSubscribe(): 게시자가 구독자를 추가할 때 이 메서드가 호출되었습니다.
예시
import java.util.concurrent.Flow; import java.util.concurrent.SubmissionPublisher; import java.util.stream.IntStream; public class SubscriberImplTest { public static class Subscriber implements Flow.Subscriber<Integer> { private Flow.Subscription subscription; private boolean isDone; @Override public void onSubscribe(Flow.Subscription subscription) { System.out.println("Subscribed"); this.subscription = subscription; this.subscription.request(1); } @Override public void onNext(Integer item) { System.out.println("Processing " + item); this.subscription.request(1); } @Override public void onError(Throwable throwable) { throwable.printStackTrace(); } @Override public void onComplete() { System.out.println("Processing done"); isDone = true; } } public static void main(String args[]) throws InterruptedException { SubmissionPublisher<Integer> publisher = new SubmissionPublisher<>(); Subscriber subscriber = new Subscriber(); publisher.subscribe(subscriber); IntStream intData = IntStream.rangeClosed(1, 10); intData.forEach(publisher::submit); publisher.close(); while(!subscriber.isDone) { Thread.sleep(10); } System.out.println("Done"); } }
출력
Subscribed Processing 1 Processing 2 Processing 3 Processing 4 Processing 5 Processing 6 Processing 7 Processing 8 Processing 9 Processing 10 Processing done Done