SubmissionPublisher 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
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
- 상속
- 특성
- 구현
설명
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 onNext
Flow.Subscriber#onSubscribe onSubscribe
Flow.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() |
구독자에게 비동기 배달을 위해 를 사용하여 |
SubmissionPublisher(IExecutor, Int32) |
지정된 실행기를 사용하여 구독자에게 비동기 배달을 위한 새 SubmissionPublisher를 만들고, 각 구독자에 대해 지정된 최대 버퍼 크기를 사용하고 메서드 |
SubmissionPublisher(IExecutor, Int32, IBiConsumer) |
구독자에게 비동기 배달을 위해 지정된 실행기를 사용하여 새 SubmissionPublisher를 만들고, 각 구독자에 대해 지정된 최대 버퍼 크기를 사용하고, null이 아닌 경우 구독자가 메서드 |
SubmissionPublisher(IntPtr, JniHandleOwnership) |
|
속성
Class |
이 |
ClosedException |
와 연결된 |
Executor |
비동기 배달에 사용되는 실행기를 반환합니다. |
Handle |
기본 Android instance 대한 핸들입니다. (다음에서 상속됨 Object) |
HasSubscribers |
이 게시자에 구독자가 있으면 true를 반환합니다. |
IsClosed |
이 게시자가 제출을 수락하지 않으면 true를 반환합니다. |
JniIdentityHashCode |
|
JniPeerMembers |
|
MaxBufferCapacity |
구독자당 최대 버퍼 용량을 반환합니다. |
NumberOfSubscribers |
현재 구독자 수를 반환합니다. |
PeerReference |
|
Subscribers |
구독자에서 메서드를 호출하는 것이 아니라 모니터링 및 추적 목적으로 현재 구독자 목록을 반환 |
ThresholdClass |
|
ThresholdType |
|
메서드
Clone() |
이 개체의 복사본을 만들고 반환합니다. (다음에서 상속됨 Object) |
Close() |
이미 닫혀 있지 않으면 현재 구독자에게 신호를 발급 |
CloseExceptionally(Throwable) |
이미 닫혀 |
Consume(IConsumer) |
지정된 소비자 함수를 사용하여 게시된 모든 항목을 처리합니다. |
Dispose() |
|
Dispose(Boolean) |
|
Equals(Object) |
다른 개체가 이 개체와 "같음"인지 여부를 나타냅니다. (다음에서 상속됨 Object) |
EstimateMaximumLag() |
현재 구독자 중에서 생성되었지만 아직 사용되지 않은 최대 항목 수를 반환합니다. |
EstimateMinimumDemand() |
모든 현재 구독자 중에서 요청되었지만 아직 생성되지 않은 최소 항목 수를 반환합니다. |
GetHashCode() |
개체의 해시 코드 값을 반환합니다. (다음에서 상속됨 Object) |
IsSubscribed(Flow+ISubscriber) |
|
JavaFinalize() |
가비지 수집에서 개체에 대한 참조가 더 이상 없다고 판단할 때 개체의 가비지 수집기에서 호출됩니다. (다음에서 상속됨 Object) |
Notify() |
이 개체의 모니터에서 대기 중인 단일 스레드를 해제합니다. (다음에서 상속됨 Object) |
NotifyAll() |
이 개체의 모니터에서 대기 중인 모든 스레드를 해제합니다. (다음에서 상속됨 Object) |
Offer(Object, IBiPredicate) |
가능한 경우 해당 메서드를 비동기적으로 호출하여 지정된 항목을 각 현재 구독자에게 게시합니다 |
Offer(Object, Int64, TimeUnit, IBiPredicate) |
가능한 경우 해당 메서드를 비동기적으로 호출하고 |
SetHandle(IntPtr, JniHandleOwnership) |
Handle 속성을 설정합니다. (다음에서 상속됨 Object) |
Submit(Object) |
해당 메서드를 비동기적으로 호출하여 지정된 항목을 각 현재 구독자에게 게시하고 |
Subscribe(Flow+ISubscriber) |
|
ToArray<T>() |
|
ToString() |
개체의 문자열 표현을 반환합니다. (다음에서 상속됨 Object) |
UnregisterFromRuntime() |
|
Wait() |
현재 스레드가 깨어날 때까지 대기하게 합니다( 일반적으로 <알림을 받><거나 <>중단/>em>)합니다<. (다음에서 상속됨 Object) |
Wait(Int64) |
현재 스레드가 깨어날 때까지 대기하게 합니다. 일반적으로 <>알림을 받<거나 <중단</>내보내>>거나 일정량의 실시간이 경과할 때까지 대기합니다. (다음에서 상속됨 Object) |
Wait(Int64, Int32) |
현재 스레드가 깨어날 때까지 대기하게 합니다. 일반적으로 <>알림을 받<거나 <중단</>내보내>>거나 일정량의 실시간이 경과할 때까지 대기합니다. (다음에서 상속됨 Object) |
명시적 인터페이스 구현
IJavaPeerable.Disposed() |
|
IJavaPeerable.DisposeUnlessReferenced() |
|
IJavaPeerable.Finalized() |
|
IJavaPeerable.JniManagedPeerState |
|
IJavaPeerable.SetJniIdentityHashCode(Int32) |
|
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
|
IJavaPeerable.SetPeerReference(JniObjectReference) |
|
확장 메서드
JavaCast<TResult>(IJavaObject) |
Android 런타임 확인 형식 변환을 수행합니다. |
JavaCast<TResult>(IJavaObject) |
|
GetJniTypeName(IJavaPeerable) |
|