Share via


Flow 클래스

정의

에 의해 관리되는 하나 이상의 Subscriber Subscribers에서 사용되는 항목을 생성하는 흐름 제어 구성 요소를 Publisher Publishers 설정하기 위한 상호 관련된 인터페이스 및 정적 메서드입니다Subscription Subscription.

[Android.Runtime.Register("java/util/concurrent/Flow", ApiSince=30, DoNotGenerateAcw=true)]
public sealed class Flow : Java.Lang.Object
[<Android.Runtime.Register("java/util/concurrent/Flow", ApiSince=30, DoNotGenerateAcw=true)>]
type Flow = class
    inherit Object
상속
Flow
특성

설명

에 의해 관리되는 하나 이상의 Subscriber Subscribers에서 사용되는 항목을 생성하는 흐름 제어 구성 요소를 Publisher Publishers 설정하기 위한 상호 관련된 인터페이스 및 정적 메서드입니다Subscription Subscription.

이러한 인터페이스는 반응형 스트림 사양에 해당합니다 . 동시 및 분산 비동기 설정 모두에 적용됩니다. 모든(7개) 메서드는 "단방향" 메시지 스타일로 정의 void 됩니다. 통신은 "푸시" 기반 시스템에서 발생할 수 있는 리소스 관리 문제를 방지하는 데 사용할 수 있는 간단한 형태의 흐름 제어(메서드 Subscription#request)를 사용합니다.

<b>예.</b>Publisher A는 일반적으로 자체 Subscription 구현을 정의합니다. 메서드 subscribe 에서 구현하고 호출 Subscriber에 발급합니다. 일반적으로 를 사용하여 Executor구독자에게 항목을 비동기적으로 게시합니다. 예를 들어 다음은 단일 구독자에게 단일 TRUE 항목을 발급(요청된 경우)하는 매우 간단한 게시자입니다. 구독자는 단일 항목만 수신하므로 이 클래스는 대부분의 구현에 필요한 버퍼링 및 순서 지정 컨트롤을 사용하지 않습니다.

{@code
            class OneShotPublisher implements Publisher<Boolean> {
              private final ExecutorService executor = ForkJoinPool.commonPool(); // daemon-based
              private boolean subscribed; // true after first subscribe
              public synchronized void subscribe(Subscriber<? super Boolean> subscriber) {
                if (subscribed)
                  subscriber.onError(new IllegalStateException()); // only one allowed
                else {
                  subscribed = true;
                  subscriber.onSubscribe(new OneShotSubscription(subscriber, executor));
                }
              }
              static class OneShotSubscription implements Subscription {
                private final Subscriber<? super Boolean> subscriber;
                private final ExecutorService executor;
                private Future<?> future; // to allow cancellation
                private boolean completed;
                OneShotSubscription(Subscriber<? super Boolean> subscriber,
                                    ExecutorService executor) {
                  this.subscriber = subscriber;
                  this.executor = executor;
                }
                public synchronized void request(long n) {
                  if (!completed) {
                    completed = true;
                    if (n <= 0) {
                      IllegalArgumentException ex = new IllegalArgumentException();
                      executor.execute(() -> subscriber.onError(ex));
                    } else {
                      future = executor.submit(() -> {
                        subscriber.onNext(Boolean.TRUE);
                        subscriber.onComplete();
                      });
                    }
                  }
                }
                public synchronized void cancel() {
                  completed = true;
                  if (future != null) future.cancel(false);
                }
              }
            }}

Subscriber 항목을 요청하고 처리할 수 있도록 정렬합니다. 요청되지 않은 경우 항목( Subscriber#onNext호출)은 발급되지 않지만 여러 항목을 요청할 수 있습니다. 많은 구독자 구현은 다음 예제의 스타일로 정렬할 수 있습니다. 여기서 버퍼 크기는 1단계이고 크기가 크면 일반적으로 통신이 적은 겹치는 처리를 보다 효율적으로 수행할 수 있습니다. 예를 들어 값이 64인 경우 총 미해결 요청은 32에서 64 사이로 유지됩니다. 지정된 Subscription 에 대한 구독자 메서드 호출은 엄격하게 정렬되므로 구독자가 여러 구독을 유지 관리하지 않는 한 이러한 메서드가 잠금 또는 휘발성을 사용할 필요가 없습니다(이 경우 각각 자체 구독을 사용하여 여러 구독자를 정의하는 것이 좋습니다).

{@code
            class SampleSubscriber<T> implements Subscriber<T> {
              final Consumer<? super T> consumer;
              Subscription subscription;
              final long bufferSize;
              long count;
              SampleSubscriber(long bufferSize, Consumer<? super T> consumer) {
                this.bufferSize = bufferSize;
                this.consumer = consumer;
              }
              public void onSubscribe(Subscription subscription) {
                long initialRequestSize = bufferSize;
                count = bufferSize - bufferSize / 2; // re-request when half consumed
                (this.subscription = subscription).request(initialRequestSize);
              }
              public void onNext(T item) {
                if (--count <= 0)
                  subscription.request(count = bufferSize - bufferSize / 2);
                consumer.accept(item);
              }
              public void onError(Throwable ex) { ex.printStackTrace(); }
              public void onComplete() {}
            }}

의 기본값 #defaultBufferSize 은 예상 속도, 리소스 및 사용량에 따라 Flow 구성 요소에서 요청 크기 및 용량을 선택하는 데 유용한 시작점을 제공할 수 있습니다. 또는 흐름 제어가 필요하지 않은 경우 구독자는 처음에 다음과 같이 효과적으로 바인딩되지 않은 수의 항목을 요청할 수 있습니다.

{@code
            class UnboundedSubscriber<T> implements Subscriber<T> {
              public void onSubscribe(Subscription subscription) {
                subscription.request(Long.MAX_VALUE); // effectively unbounded
              }
              public void onNext(T item) { use(item); }
              public void onError(Throwable ex) { ex.printStackTrace(); }
              public void onComplete() {}
              void use(T item) { ... }
            }}

9에 추가되었습니다.

에 대한 Java 설명서입니다 java.util.concurrent.Flow.

이 페이지의 일부는 만들고 공유하며 에 설명된 조건에 따라 사용되는 작업을 기반으로 수정됩니다.

속성

Class

Object의 런타임 클래스를 반환합니다.

(다음에서 상속됨 Object)
Handle

기본 Android instance 대한 핸들입니다.

(다음에서 상속됨 Object)
JniIdentityHashCode

에 의해 관리되는 하나 이상의 Subscriber Subscribers에서 사용되는 항목을 생성하는 흐름 제어 구성 요소를 Publisher Publishers 설정하기 위한 상호 관련된 인터페이스 및 정적 메서드입니다Subscription Subscription.

(다음에서 상속됨 Object)
JniPeerMembers

에 의해 관리되는 하나 이상의 Subscriber Subscribers에서 사용되는 항목을 생성하는 흐름 제어 구성 요소를 Publisher Publishers 설정하기 위한 상호 관련된 인터페이스 및 정적 메서드입니다Subscription Subscription.

PeerReference

에 의해 관리되는 하나 이상의 Subscriber Subscribers에서 사용되는 항목을 생성하는 흐름 제어 구성 요소를 Publisher Publishers 설정하기 위한 상호 관련된 인터페이스 및 정적 메서드입니다Subscription Subscription.

(다음에서 상속됨 Object)
ThresholdClass

이 API는 Android용 Mono 인프라를 지원하며 코드에서 직접 사용할 수 없습니다.

(다음에서 상속됨 Object)
ThresholdType

이 API는 Android용 Mono 인프라를 지원하며 코드에서 직접 사용할 수 없습니다.

(다음에서 상속됨 Object)

메서드

Clone()

이 개체의 복사본을 만들고 반환합니다.

(다음에서 상속됨 Object)
DefaultBufferSize()

다른 제약 조건이 없는 경우 사용할 수 있는 게시자 또는 구독자 버퍼링의 기본값을 반환합니다.

Dispose()

에 의해 관리되는 하나 이상의 Subscriber Subscribers에서 사용되는 항목을 생성하는 흐름 제어 구성 요소를 Publisher Publishers 설정하기 위한 상호 관련된 인터페이스 및 정적 메서드입니다Subscription Subscription.

(다음에서 상속됨 Object)
Dispose(Boolean)

에 의해 관리되는 하나 이상의 Subscriber Subscribers에서 사용되는 항목을 생성하는 흐름 제어 구성 요소를 Publisher Publishers 설정하기 위한 상호 관련된 인터페이스 및 정적 메서드입니다Subscription Subscription.

(다음에서 상속됨 Object)
Equals(Object)

다른 개체가 이 개체와 "같음"인지 여부를 나타냅니다.

(다음에서 상속됨 Object)
GetHashCode()

개체의 해시 코드 값을 반환합니다.

(다음에서 상속됨 Object)
JavaFinalize()

가비지 수집에서 개체에 대한 참조가 더 이상 없다고 판단할 때 개체의 가비지 수집기에서 호출됩니다.

(다음에서 상속됨 Object)
Notify()

이 개체의 모니터에서 대기 중인 단일 스레드를 해제합니다.

(다음에서 상속됨 Object)
NotifyAll()

이 개체의 모니터에서 대기 중인 모든 스레드를 해제합니다.

(다음에서 상속됨 Object)
SetHandle(IntPtr, JniHandleOwnership)

Handle 속성을 설정합니다.

(다음에서 상속됨 Object)
ToArray<T>()

에 의해 관리되는 하나 이상의 Subscriber Subscribers에서 사용되는 항목을 생성하는 흐름 제어 구성 요소를 Publisher Publishers 설정하기 위한 상호 관련된 인터페이스 및 정적 메서드입니다Subscription Subscription.

(다음에서 상속됨 Object)
ToString()

개체의 문자열 표현을 반환합니다.

(다음에서 상속됨 Object)
UnregisterFromRuntime()

에 의해 관리되는 하나 이상의 Subscriber Subscribers에서 사용되는 항목을 생성하는 흐름 제어 구성 요소를 Publisher Publishers 설정하기 위한 상호 관련된 인터페이스 및 정적 메서드입니다Subscription Subscription.

(다음에서 상속됨 Object)
Wait()

현재 스레드가 깨어날 때까지 대기하게 합니다( 일반적으로 <알림을 받><거나 <>중단/>em>)합니다<.

(다음에서 상속됨 Object)
Wait(Int64)

현재 스레드가 깨어날 때까지 대기하게 합니다. 일반적으로 <>알림을 받<거나 <중단</>내보내>>거나 일정량의 실시간이 경과할 때까지 대기합니다.

(다음에서 상속됨 Object)
Wait(Int64, Int32)

현재 스레드가 깨어날 때까지 대기하게 합니다. 일반적으로 <>알림을 받<거나 <중단</>내보내>>거나 일정량의 실시간이 경과할 때까지 대기합니다.

(다음에서 상속됨 Object)

명시적 인터페이스 구현

IJavaPeerable.Disposed()

에 의해 관리되는 하나 이상의 Subscriber Subscribers에서 사용되는 항목을 생성하는 흐름 제어 구성 요소를 Publisher Publishers 설정하기 위한 상호 관련된 인터페이스 및 정적 메서드입니다Subscription Subscription.

(다음에서 상속됨 Object)
IJavaPeerable.DisposeUnlessReferenced()

에 의해 관리되는 하나 이상의 Subscriber Subscribers에서 사용되는 항목을 생성하는 흐름 제어 구성 요소를 Publisher Publishers 설정하기 위한 상호 관련된 인터페이스 및 정적 메서드입니다Subscription Subscription.

(다음에서 상속됨 Object)
IJavaPeerable.Finalized()

에 의해 관리되는 하나 이상의 Subscriber Subscribers에서 사용되는 항목을 생성하는 흐름 제어 구성 요소를 Publisher Publishers 설정하기 위한 상호 관련된 인터페이스 및 정적 메서드입니다Subscription Subscription.

(다음에서 상속됨 Object)
IJavaPeerable.JniManagedPeerState

에 의해 관리되는 하나 이상의 Subscriber Subscribers에서 사용되는 항목을 생성하는 흐름 제어 구성 요소를 Publisher Publishers 설정하기 위한 상호 관련된 인터페이스 및 정적 메서드입니다Subscription Subscription.

(다음에서 상속됨 Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

에 의해 관리되는 하나 이상의 Subscriber Subscribers에서 사용되는 항목을 생성하는 흐름 제어 구성 요소를 Publisher Publishers 설정하기 위한 상호 관련된 인터페이스 및 정적 메서드입니다Subscription Subscription.

(다음에서 상속됨 Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

에 의해 관리되는 하나 이상의 Subscriber Subscribers에서 사용되는 항목을 생성하는 흐름 제어 구성 요소를 Publisher Publishers 설정하기 위한 상호 관련된 인터페이스 및 정적 메서드입니다Subscription Subscription.

(다음에서 상속됨 Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

에 의해 관리되는 하나 이상의 Subscriber Subscribers에서 사용되는 항목을 생성하는 흐름 제어 구성 요소를 Publisher Publishers 설정하기 위한 상호 관련된 인터페이스 및 정적 메서드입니다Subscription Subscription.

(다음에서 상속됨 Object)

확장 메서드

JavaCast<TResult>(IJavaObject)

Android 런타임 확인 형식 변환을 수행합니다.

JavaCast<TResult>(IJavaObject)

에 의해 관리되는 하나 이상의 Subscriber Subscribers에서 사용되는 항목을 생성하는 흐름 제어 구성 요소를 Publisher Publishers 설정하기 위한 상호 관련된 인터페이스 및 정적 메서드입니다Subscription Subscription.

GetJniTypeName(IJavaPeerable)

에 의해 관리되는 하나 이상의 Subscriber Subscribers에서 사용되는 항목을 생성하는 흐름 제어 구성 요소를 Publisher Publishers 설정하기 위한 상호 관련된 인터페이스 및 정적 메서드입니다Subscription Subscription.

적용 대상