Share via


SubmissionPublisher 클래스

정의

Flow.Publisher 닫을 때까지 현재 구독자에게 제출된(null이 아닌) 항목을 비동기적으로 발급하는 입니다.

[Android.Runtime.Register("java/util/concurrent/SubmissionPublisher", ApiSince=33, DoNotGenerateAcw=true)]
[Java.Interop.JavaTypeParameters(new System.String[] { "T" })]
public class SubmissionPublisher : Java.Lang.Object, IDisposable, Java.Interop.IJavaPeerable, Java.Lang.IAutoCloseable, Java.Util.Concurrent.Flow.IPublisher
[<Android.Runtime.Register("java/util/concurrent/SubmissionPublisher", ApiSince=33, DoNotGenerateAcw=true)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "T" })>]
type SubmissionPublisher = class
    inherit Object
    interface IAutoCloseable
    interface IJavaObject
    interface IDisposable
    interface IJavaPeerable
    interface Flow.IPublisher
상속
SubmissionPublisher
특성
구현

설명

Flow.Publisher 닫을 때까지 현재 구독자에게 제출된(null이 아닌) 항목을 비동기적으로 발급하는 입니다. 삭제 또는 예외가 발생하지 않는 한 각 현재 구독자는 새로 제출된 항목을 동일한 순서로 받습니다. SubmissionPublisher를 사용하면 항목 생성기가 흐름 제어에 대한 드롭 처리 및/또는 차단에 의존하는 규격 반응 스트림 게시자 역할을 할 수 있습니다.

SubmissionPublisher는 구독자에게 배달하기 위해 생성자에 제공된 를 사용합니다 Executor . 실행기의 가장 좋은 선택은 예상 사용량에 따라 달라집니다. 제출된 항목의 생성기가 별도의 스레드에서 실행되고 구독자 수를 예측할 수 있는 경우 를 사용하는 Executors#newFixedThreadPool것이 좋습니다. 그렇지 않으면 기본값(일반적으로 )을 사용하는 것이 좋습니다 ForkJoinPool#commonPool.

버퍼링을 사용하면 생산자와 소비자가 다른 속도로 임시로 작동할 수 있습니다. 각 구독자는 독립적인 버퍼를 사용합니다. 버퍼는 처음 사용할 때 만들어지고 필요에 따라 지정된 최대값까지 확장됩니다. (적용된 용량은 2의 가장 가까운 전력으로 반올림되거나 이 구현에서 지원하는 가장 큰 값으로 제한될 수 있습니다.) 를 호출 Flow.Subscription#request(long) request 해도 버퍼가 직접 확장되는 것은 아니지만 채워지지 않은 요청이 최대 용량을 초과하면 포화 상태가 발생할 수 있습니다. 의 기본값 Flow#defaultBufferSize() 은 예상 속도, 리소스 및 사용량에 따라 용량을 선택하는 데 유용한 시작점을 제공할 수 있습니다.

단일 SubmissionPublisher는 여러 원본 간에 공유할 수 있습니다. 항목을 게시하거나 각 구독자의 해당 액세스 이후에 발생하는 신호를 <>발급하기 전에<> 원본 스레드의 작업입니다. 그러나 보고된 지연 및 수요 추정치는 동기화 제어가 아닌 모니터링에 사용하도록 설계되었으며 진행 상황의 부실하거나 부정확한 견해를 반영할 수 있습니다.

게시 메서드는 버퍼가 포화될 때 수행할 작업과 관련된 다양한 정책을 지원합니다. 리소스를 사용할 수 있게 될 때까지 메서드 #submit(Object) submit 블록입니다. 가장 간단하지만 응답성이 가장 낮은 경우 메서드는 offer 즉시 또는 제한된 시간 제한으로 항목을 삭제할 수 있지만 처리기를 개입한 다음 다시 시도할 수 있는 기회를 제공합니다.

구독자 메서드가 예외를 throw하면 해당 구독이 취소됩니다. 처리기가 생성자 인수로 제공된 경우 메서드 의 예외에 따라 취소 전에 호출되지만 메서드 Flow.Subscriber#onNext onNextFlow.Subscriber#onSubscribe onSubscribeFlow.Subscriber#onError(Throwable) onError 의 예외는 이며 Flow.Subscriber#onComplete() onComplete 취소 전에 기록되거나 처리되지 않습니다. 제공된 실행기가 작업을 실행하려고 할 때 (또는 다른 RuntimeException 또는 오류)를 throw RejectedExecutionException 하거나 삭제된 항목을 처리할 때 놓기 처리기가 예외를 throw하는 경우 예외가 다시 발생합니다. 이러한 경우 모든 구독자가 게시된 항목을 발급한 것은 아닙니다. 일반적으로 이러한 경우에 하는 것이 #closeExceptionally closeExceptionally 좋습니다.

메서드 #consume(Consumer) 는 구독자의 유일한 작업이 제공된 함수를 사용하여 모든 항목을 요청하고 처리하는 일반적인 경우에 대한 지원을 간소화합니다.

이 클래스는 항목을 생성하고 이 클래스의 메서드를 사용하여 게시하는 서브클래스의 편리한 기반이 될 수도 있습니다. 예를 들어 공급업체에서 생성된 항목을 주기적으로 게시하는 클래스가 여기에 있습니다. (실제로 생성을 독립적으로 시작 및 중지하거나, 게시자 간에 실행기를 공유하거나, SubmissionPublisher를 슈퍼클래스가 아닌 구성 요소로 사용하는 메서드를 추가할 수 있습니다.)

{@code
            class PeriodicPublisher<T> extends SubmissionPublisher<T> {
              final ScheduledFuture<?> periodicTask;
              final ScheduledExecutorService scheduler;
              PeriodicPublisher(Executor executor, int maxBufferCapacity,
                                Supplier<? extends T> supplier,
                                long period, TimeUnit unit) {
                super(executor, maxBufferCapacity);
                scheduler = new ScheduledThreadPoolExecutor(1);
                periodicTask = scheduler.scheduleAtFixedRate(
                  () -> submit(supplier.get()), 0, period, unit);
              }
              public void close() {
                periodicTask.cancel(false);
                scheduler.shutdown();
                super.close();
              }
            }}

다음은 구현의 예입니다 Flow.Processor . 설명의 단순성을 위해 게시자에 대한 단일 단계 요청을 사용합니다. 적응형 버전은 다른 유틸리티 메서드와 함께 에서 submit반환된 지연 예상을 사용하여 흐름을 모니터링할 수 있습니다.

{@code
            class TransformProcessor<S,T> extends SubmissionPublisher<T>
              implements Flow.Processor<S,T> {
              final Function<? super S, ? extends T> function;
              Flow.Subscription subscription;
              TransformProcessor(Executor executor, int maxBufferCapacity,
                                 Function<? super S, ? extends T> function) {
                super(executor, maxBufferCapacity);
                this.function = function;
              }
              public void onSubscribe(Flow.Subscription subscription) {
                (this.subscription = subscription).request(1);
              }
              public void onNext(S item) {
                subscription.request(1);
                submit(function.apply(item));
              }
              public void onError(Throwable ex) { closeExceptionally(ex); }
              public void onComplete() { close(); }
            }}

9에 추가되었습니다.

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

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

생성자

SubmissionPublisher()

구독자에게 비동기 배달을 위해 를 사용하여 ForkJoinPool#commonPool() 새 SubmissionPublisher를 만듭니다(적어도 두 개 이상의 병렬 처리 수준을 지원하지 않는 한, 각 작업을 실행하기 위해 새 스레드가 생성됨). 최대 버퍼 용량 Flow#defaultBufferSize은 이고 메서드 Flow.Subscriber#onNext(Object) onNext에서는 구독자 예외에 대한 처리기가 없습니다.

SubmissionPublisher(IExecutor, Int32)

지정된 실행기를 사용하여 구독자에게 비동기 배달을 위한 새 SubmissionPublisher를 만들고, 각 구독자에 대해 지정된 최대 버퍼 크기를 사용하고 메서드 Flow.Subscriber#onNext(Object) onNext에서 구독자 예외에 대한 처리기를 만듭니다.

SubmissionPublisher(IExecutor, Int32, IBiConsumer)

구독자에게 비동기 배달을 위해 지정된 실행기를 사용하여 새 SubmissionPublisher를 만들고, 각 구독자에 대해 지정된 최대 버퍼 크기를 사용하고, null이 아닌 경우 구독자가 메서드 Flow.Subscriber#onNext(Object) onNext에서 예외를 throw할 때 호출되는 지정된 처리기를 만듭니다.

SubmissionPublisher(IntPtr, JniHandleOwnership)

Flow.Publisher 닫을 때까지 현재 구독자에게 제출된(null이 아닌) 항목을 비동기적으로 발급하는 입니다.

속성

Class

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

(다음에서 상속됨 Object)
ClosedException

와 연결된 #closeExceptionally(Throwable) closeExceptionally예외를 반환하거나, 닫혀 있지 않거나 정상적으로 닫힌 경우 null을 반환합니다.

Executor

비동기 배달에 사용되는 실행기를 반환합니다.

Handle

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

(다음에서 상속됨 Object)
HasSubscribers

이 게시자에 구독자가 있으면 true를 반환합니다.

IsClosed

이 게시자가 제출을 수락하지 않으면 true를 반환합니다.

JniIdentityHashCode

Flow.Publisher 닫을 때까지 현재 구독자에게 제출된(null이 아닌) 항목을 비동기적으로 발급하는 입니다.

(다음에서 상속됨 Object)
JniPeerMembers

Flow.Publisher 닫을 때까지 현재 구독자에게 제출된(null이 아닌) 항목을 비동기적으로 발급하는 입니다.

MaxBufferCapacity

구독자당 최대 버퍼 용량을 반환합니다.

NumberOfSubscribers

현재 구독자 수를 반환합니다.

PeerReference

Flow.Publisher 닫을 때까지 현재 구독자에게 제출된(null이 아닌) 항목을 비동기적으로 발급하는 입니다.

(다음에서 상속됨 Object)
Subscribers

구독자에서 메서드를 호출하는 것이 아니라 모니터링 및 추적 목적으로 현재 구독자 목록을 반환 Flow.Subscriber 합니다.

ThresholdClass

Flow.Publisher 닫을 때까지 현재 구독자에게 제출된(null이 아닌) 항목을 비동기적으로 발급하는 입니다.

ThresholdType

Flow.Publisher 닫을 때까지 현재 구독자에게 제출된(null이 아닌) 항목을 비동기적으로 발급하는 입니다.

메서드

Clone()

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

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

이미 닫혀 있지 않으면 현재 구독자에게 신호를 발급 Flow.Subscriber#onComplete() onComplete 하고 후속 게시 시도를 허용하지 않습니다.

CloseExceptionally(Throwable)

이미 닫혀 Flow.Subscriber#onError(Throwable) onError 있지 않은 경우 지정된 오류로 현재 구독자에게 신호를 발급하고 후속 게시 시도를 허용하지 않습니다.

Consume(IConsumer)

지정된 소비자 함수를 사용하여 게시된 모든 항목을 처리합니다.

Dispose()

Flow.Publisher 닫을 때까지 현재 구독자에게 제출된(null이 아닌) 항목을 비동기적으로 발급하는 입니다.

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

Flow.Publisher 닫을 때까지 현재 구독자에게 제출된(null이 아닌) 항목을 비동기적으로 발급하는 입니다.

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

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

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

현재 구독자 중에서 생성되었지만 아직 사용되지 않은 최대 항목 수를 반환합니다.

EstimateMinimumDemand()

모든 현재 구독자 중에서 요청되었지만 아직 생성되지 않은 최소 항목 수를 반환합니다.Flow.Subscription#request(long) request

GetHashCode()

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

(다음에서 상속됨 Object)
IsSubscribed(Flow+ISubscriber)

Flow.Publisher 닫을 때까지 현재 구독자에게 제출된(null이 아닌) 항목을 비동기적으로 발급하는 입니다.

JavaFinalize()

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

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

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

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

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

(다음에서 상속됨 Object)
Offer(Object, IBiPredicate)

가능한 경우 해당 메서드를 비동기적으로 호출하여 지정된 항목을 각 현재 구독자에게 게시합니다 Flow.Subscriber#onNext(Object) onNext .

Offer(Object, Int64, TimeUnit, IBiPredicate)

가능한 경우 해당 메서드를 비동기적으로 호출하고 Flow.Subscriber#onNext(Object) onNext , 구독에 대한 리소스를 사용할 수 없는 동안, 지정된 시간 제한까지 또는 호출자 스레드가 중단될 때까지, 지정된 처리기(null이 아닌 경우)가 호출될 때까지 차단하고, true를 반환하는 경우 한 번 다시 시도하여 각 현재 구독자에게 해당 항목을 게시합니다.

SetHandle(IntPtr, JniHandleOwnership)

Handle 속성을 설정합니다.

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

해당 메서드를 비동기적으로 호출하여 지정된 항목을 각 현재 구독자에게 게시하고 Flow.Subscriber#onNext(Object) onNext 구독자에 대한 리소스를 사용할 수 없는 동안 무정전으로 차단합니다.

Subscribe(Flow+ISubscriber)

Flow.Publisher 닫을 때까지 현재 구독자에게 제출된(null이 아닌) 항목을 비동기적으로 발급하는 입니다.

ToArray<T>()

Flow.Publisher 닫을 때까지 현재 구독자에게 제출된(null이 아닌) 항목을 비동기적으로 발급하는 입니다.

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

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

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

Flow.Publisher 닫을 때까지 현재 구독자에게 제출된(null이 아닌) 항목을 비동기적으로 발급하는 입니다.

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

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

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

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

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

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

(다음에서 상속됨 Object)

명시적 인터페이스 구현

IJavaPeerable.Disposed()

Flow.Publisher 닫을 때까지 현재 구독자에게 제출된(null이 아닌) 항목을 비동기적으로 발급하는 입니다.

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

Flow.Publisher 닫을 때까지 현재 구독자에게 제출된(null이 아닌) 항목을 비동기적으로 발급하는 입니다.

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

Flow.Publisher 닫을 때까지 현재 구독자에게 제출된(null이 아닌) 항목을 비동기적으로 발급하는 입니다.

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

Flow.Publisher 닫을 때까지 현재 구독자에게 제출된(null이 아닌) 항목을 비동기적으로 발급하는 입니다.

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

Flow.Publisher 닫을 때까지 현재 구독자에게 제출된(null이 아닌) 항목을 비동기적으로 발급하는 입니다.

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

Flow.Publisher 닫을 때까지 현재 구독자에게 제출된(null이 아닌) 항목을 비동기적으로 발급하는 입니다.

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

Flow.Publisher 닫을 때까지 현재 구독자에게 제출된(null이 아닌) 항목을 비동기적으로 발급하는 입니다.

(다음에서 상속됨 Object)

확장 메서드

JavaCast<TResult>(IJavaObject)

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

JavaCast<TResult>(IJavaObject)

Flow.Publisher 닫을 때까지 현재 구독자에게 제출된(null이 아닌) 항목을 비동기적으로 발급하는 입니다.

GetJniTypeName(IJavaPeerable)

Flow.Publisher 닫을 때까지 현재 구독자에게 제출된(null이 아닌) 항목을 비동기적으로 발급하는 입니다.

적용 대상