Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java 9의 구독 인터페이스에 대한 규칙은 무엇입니까?


구독 데이터 를 조정하기 위해 정확히 한 명의 게시자와 한 명의 구독자가 공유할 수 있습니다. 교환 . 이것이 구독()의 이유입니다. 메소드는 생성된 구독을 반환하지 않고 대신 void를 반환합니다. . 구독은 onSubscribe()를 통해서만 구독자에게 전달됩니다. 메소드 콜백. 구독 인터페이스에는 request()의 두 가지 메서드가 있습니다. 및 취소() .

구문

public interface Subscription {
   public void request(long n);
   public void cancel();
}

구독 인터페이스 규칙:

  • 구독.요청()Subscription.cancel() 메서드는 구독자 컨텍스트 내에서만 호출되어야 합니다.
  • 구독은 구독자가 Subscription.request()를 호출할 수 있도록 해야 합니다. onNext() 내에서 동기적으로 메서드 또는 onSubscribe() 방법.
  • 구독.요청() 메소드는 게시자 간의 가능한 동기 재귀에 상한선을 지정해야 합니다. 및 구독자 .
  • 구독.요청() 메서드는 적시에 반환하여 호출자의 응답을 존중해야 합니다.
  • 구독.취소() 메서드는 적시에 반환하여 호출자의 응답을 존중해야 하며 스레드로부터 안전해야 합니다. .
  • 구독이 취소되지 않은 동안 Subscription.request(long n) 메소드는 각 구독자에게 생성될 추가 요소의 주어진 수를 등록해야 합니다.
  • 구독이 취소되지 않은 동안 Subscription.request(long n) 메소드는 onError()를 호출해야 합니다. IllegalArgumentException 이 있는 메소드 인수가 <=0인 경우
  • 구독이 취소되지 않은 동안 Subscription.request(long n) 메소드는 동기식으로 onNext()를 호출할 수 있습니다. 이 구독자 또는 다른 구독자에 대한 방법입니다.
  • 구독이 취소되지 않은 동안 Subscription.request(long n) 메소드는 동기식으로 onComplete()를 호출할 수 있습니다. 또는 onError() 이 구독자 또는 다른 구독자에 대한 방법입니다.
  • 구독이 취소되지 않은 동안 Subscription.cancel() 메서드는 게시자에게 구독자 신호를 중지하도록 요청해야 합니다. 구독에 즉시 영향을 주는 작업은 아닙니다.
  • 구독이 취소되지 않은 동안 Subscription.cancel() 메소드는 게시자에게 해당 구독자에 대한 참조를 삭제하도록 요청해야 합니다.
  • Subscription.cancel() 호출 및 Subscription.request() 메서드는 정상적으로 반환되어야 합니다.
  • 구독 최대 2^63-1의 수요를 요청하고 지원하려면 무제한의 호출을 지원해야 합니다. . 게시자가 2^63-1 이상의 요구를 효과적으로 간주할 수 있는 경우 무제한 .