Share via


ForkJoinTask 클래스

정의

내에서 실행되는 작업에 대한 추상 기본 클래스입니다 ForkJoinPool.

[Android.Runtime.Register("java/util/concurrent/ForkJoinTask", DoNotGenerateAcw=true)]
[Java.Interop.JavaTypeParameters(new System.String[] { "V" })]
public abstract class ForkJoinTask : Java.Lang.Object, IDisposable, Java.Interop.IJavaPeerable, Java.IO.ISerializable, Java.Util.Concurrent.IFuture
[<Android.Runtime.Register("java/util/concurrent/ForkJoinTask", DoNotGenerateAcw=true)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "V" })>]
type ForkJoinTask = class
    inherit Object
    interface ISerializable
    interface IJavaObject
    interface IDisposable
    interface IJavaPeerable
    interface IFuture
상속
ForkJoinTask
파생
특성
구현

설명

내에서 실행되는 태스크에 대한 추상 기본 클래스입니다 ForkJoinPool. 는 ForkJoinTask 일반 스레드보다 훨씬 가벼운 스레드와 유사한 엔터티입니다. 몇 가지 사용 제한의 가격으로 ForkJoinPool의 적은 수의 실제 스레드에서 엄청난 수의 작업 및 하위 작업을 호스팅할 수 있습니다.

"기본" ForkJoinTask 은 에 명시적으로 제출되거나ForkJoinPool, ForkJoin 계산에 아직 참여하지 않은 경우 , #invoke또는 관련 메서드를 통해 #fork에서 시작된 ForkJoinPool#commonPool() 실행을 시작합니다. 시작되면 일반적으로 다른 하위 작업을 시작합니다. 이 클래스의 이름으로 표시된 대로 를 사용하는 많은 프로그램은 메서드 및 또는 파생물(예: #invokeAll(ForkJoinTask...) invokeAll)만 사용합니다ForkJoinTask.#join#fork 그러나 이 클래스는 새로운 형태의 포크/조인 처리를 지원할 수 있는 확장 메커니즘뿐만 아니라 고급 사용에서 사용할 수 있는 다양한 다른 메서드도 제공합니다.

ForkJoinTask 은 의 간단한 형식입니다Future. 의 효율성ForkJoinTask은 순수 함수를 계산하거나 순수하게 격리된 개체에서 작동하는 계산 작업으로 사용하는 기본 반영하는 제한 집합(부분적으로만 정적으로 적용 가능)에서 비롯됩니다. 기본 조정 메커니즘은 #fork비동기 실행을 정렬하는 및 이며 #join, 작업의 결과가 계산될 때까지 진행되지 않습니다. 계산은 메서드 또는 블록을 방지하는 synchronized 것이 이상적이어야 하며, 다른 작업에 조인하거나 포크/조인 예약과 협력하도록 보급된 단계와 같은 동기화 장치를 사용하는 것 외에 다른 차단 동기화를 최소화해야 합니다. 또한 세분화 가능한 작업은 차단 I/O를 수행하지 않아야 하며, 다른 실행 중인 작업에서 액세스하는 것과 완전히 독립적인 변수에 액세스하는 것이 이상적입니다. 이러한 지침은 throw되는 것과 같은 IOExceptions 확인된 예외를 허용하지 않음으로써 느슨하게 적용됩니다. 그러나 계산에 아직 선택되지 않은 예외가 발생할 수 있습니다. 이 예외는 연결을 시도하는 호출자에게 다시 발생합니다. 이러한 예외에는 내부 작업 큐를 할당하지 못하는 것과 같은 내부 리소스 소모로 인한 추가적인 예외가 포함될 RejectedExecutionException 수 있습니다. 다시 throw된 예외는 일반 예외와 동일한 방식으로 동작하지만 가능한 경우 계산을 시작한 스레드와 실제로 예외가 발생한 스레드의 스택 추적(예: 사용 ex.printStackTrace())을 포함합니다. 최소한 후자만 포함됩니다.

차단할 수 있는 ForkJoinTasks를 정의하고 사용할 수 있지만, 이렇게 하려면 세 가지 추가 고려 사항이 필요합니다. (1) 외부 동기화 또는 I/>O를 차단하는 태스크에 종속되어야 하는 경우<<> 몇 가지 완료가 필요합니다. 조인되지 않은 이벤트 스타일 비동기 작업(예: 해당 서브클래싱 CountedCompleter)은 종종 이 범주에 속합니다. (2) 리소스 영향을 최소화하려면 작업이 작아야 합니다. 이상적으로는 (가능한) 차단 작업만 수행합니다. (3) API를 ForkJoinPool.ManagedBlocker 사용하거나 차단된 작업의 수가 풀 ForkJoinPool#getParallelism 수준보다 작은 것으로 알려진 경우가 아니면 풀은 진행률 또는 양호한 성능을 보장하기 위해 충분한 스레드를 사용할 수 있다고 보장할 수 없습니다.

작업의 #join완료를 기다리고 결과를 추출하는 기본 방법은 이지만 몇 가지 변형이 있습니다. 메서드는 Future#get 규칙을 사용하여 Future 완료를 위한 인터럽트 및/또는 시간 제한 대기를 지원하고 결과를 보고합니다. 메서드 #invoke 는 의미상 와 동일 fork(); join() 하지만 항상 현재 스레드에서 실행을 시작하려고 시도합니다. 이러한 메서드의 "<em>quiet</em>" 형식은 결과를 추출하거나 예외를 보고하지 않습니다. 이는 작업 집합이 실행되고 있고 모든 작업이 완료될 때까지 결과 또는 예외 처리를 지연해야 하는 경우에 유용할 수 있습니다. 메서드 invokeAll (여러 버전에서 사용 가능)는 작업 집합을 포크하고 모두 조인하는 가장 일반적인 형태의 병렬 호출을 수행합니다.

가장 일반적인 사용법에서 포크 조인 쌍은 병렬 재귀 함수에서 호출(포크) 및 반환(조인)처럼 작동합니다. 다른 형태의 재귀 호출과 마찬가지로 반환(조인)은 가장 먼저 수행되어야 합니다. 예를 들어 는 이전에 조인 a.fork(); b.fork(); b.join(); a.join(); 하는 것보다 훨씬 더 효율적일 수 있습니다a.b

태스크의 실행 상태 여러 세부 수준에서 #isDone 쿼리할 수 있습니다. 태스크가 어떤 방식으로든 완료된 경우(실행하지 않고 작업이 취소된 경우 포함) #isCompletedNormally true이고, 취소 없이 작업이 완료되었거나 예외가 발생한 경우 true이고, #isCancelled 작업이 취소된 경우(이 경우 #getException 를 반환CancellationException함) true이고#isCompletedAbnormally, 작업이 취소되었거나 예외가 발생한 경우 true입니다. 이 경우 #getException 발생한 예외 또는 CancellationException를 반환합니다.

ForkJoinTask 클래스는 일반적으로 직접 서브클래스되지 않습니다. 대신 특정 스타일의 포크/조인 처리를 지원하는 추상 클래스 중 하나를 서브클래싱합니다. 일반적으로 RecursiveAction 결과를 반환하지 않는 대부분의 계산, RecursiveTask 수행된 작업 및 CountedCompleter 완료된 작업이 다른 작업을 트리거하는 계산에 대해 서브클래싱합니다. 일반적으로 구체적인 ForkJoinTask 하위 클래스는 생성자에 설정된 매개 변수로 구성된 필드를 선언한 다음, 이 기본 클래스에서 제공하는 컨트롤 메서드를 사용하는 메서드를 정의 compute 합니다.

메서드 #join 및 해당 변형은 완료 종속성이 순환인 경우에만 사용하기에 적합합니다. 즉, 병렬 계산을 DAG(지시된 순환 그래프)로 설명할 수 있습니다. 그렇지 않으면 태스크가 주기적으로 서로를 대기하므로 실행에서 교착 상태가 발생할 수 있습니다. 그러나 이 프레임워크는 정적으로 DAG로 구성되지 않은 문제에 대해 사용자 지정 서브클래스를 생성하는 데 사용할 수 있는 다른 메서드 및 기술(예 Phaser: , #helpQuiesce#complete사용)을 지원합니다. 이러한 사용을 지원하기 위해 ForkJoinTask는 를 사용하여 또는 #compareAndSetForkJoinTaskTag 를 사용하여 #getForkJoinTaskTag#setForkJoinTaskTag 값을 사용하여 태그</em>short 을 원자적으로 <포함>할 수 있습니다. ForkJoinTask 구현은 이러한 protected 메서드 또는 태그를 어떤 용도로도 사용하지 않지만 특수 서브클래스를 생성하는 데 사용할 수 있습니다. 예를 들어 병렬 그래프 순회는 제공된 메서드를 사용하여 이미 처리된 노드/작업을 다시 방문하지 않도록 할 수 있습니다. (태그 지정에 대한 메서드 이름은 사용 패턴을 반영하는 메서드의 정의를 장려하기 위해 부분적으로 부피가 높습니다.)

대부분의 기본 지원 메서드는 final기본 경량 작업 일정 프레임워크에 본질적으로 연결된 구현의 재정의를 방지하기 위해 입니다. 포크/조인 처리의 새로운 기본 스타일을 만드는 개발자는 메서드 #exec, 및 를 최소한으로 구현 protected 하는 동시에 하위 클래스에서 구현할 수 있는 추상 계산 메서드를 도입해야 하며#getRawResult, 이 클래스에서 제공하는 다른 protected 메서드에 의존할 수도 #setRawResult있습니다.

ForkJoinTasks는 비교적 적은 양의 계산을 수행해야 합니다. 대용량 작업은 일반적으로 재귀 분해를 통해 더 작은 하위 작업으로 분할해야 합니다. 매우 대략적인 썸 규칙으로 작업은 100개 이상 및 10000개 미만의 기본 계산 단계를 수행해야 하며 무기한 반복을 피해야 합니다. 작업이 너무 크면 병렬 처리량이 향상되지 않습니다. 너무 작은 경우 메모리 및 내부 작업 유지 관리 오버헤드로 인해 처리가 과부하가 발생할 수 있습니다.

이 클래스는 의 실행을 ForkJoinTasks 다른 종류의 작업과 혼합할 때 사용할 수 있는 및 Callable에 대한 Runnable 메서드를 제공합니다adapt. 모든 작업이 이 형식인 경우 asyncMode/em에서 <생성된 풀을 사용하는 것이 좋습니다>.><

ForkJoinTasks는 Serializable원격 실행 프레임워크와 같은 확장에서 사용할 수 있는 입니다. 실행 전후에만 작업을 직렬화하는 것이 합리적이지만 실행 중에는 직렬화하지 않는 것이 좋습니다. 직렬화는 실행 자체 중에 의존하지 않습니다.

1.7에 추가되었습니다.

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

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

생성자

ForkJoinTask()

호출할 서브클래스에 대한 생성자입니다.

ForkJoinTask(IntPtr, JniHandleOwnership)

JNI 개체의 관리되는 표현을 만들 때 사용되는 생성자입니다. 런타임에서 호출합니다.

속성

Class

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

(다음에서 상속됨 Object)
Exception

기본 계산에서 throw된 예외를 반환하거나 CancellationException 취소된 경우 또는 null 메서드가 아직 완료되지 않은 경우 를 반환합니다.

ForkJoinTaskTag

이 작업의 태그를 반환합니다.

Handle

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

(다음에서 상속됨 Object)
IsCancelled

이 작업이 정상적으로 완료되기 전에 취소된 경우 를 반환 true 합니다.

IsCompletedAbnormally

이 작업이 예외를 throw했거나 취소된 경우 를 반환 true 합니다.

IsCompletedNormally

예외를 throw하지 않고 이 작업이 완료되고 취소되지 않은 경우 를 반환 true 합니다.

IsDone

이 작업이 완료되면 를 반환 true 합니다.

JniIdentityHashCode

내에서 실행되는 작업에 대한 추상 기본 클래스입니다 ForkJoinPool.

(다음에서 상속됨 Object)
JniPeerMembers

내에서 실행되는 작업에 대한 추상 기본 클래스입니다 ForkJoinPool.

PeerReference

내에서 실행되는 작업에 대한 추상 기본 클래스입니다 ForkJoinPool.

(다음에서 상속됨 Object)
Pool

현재 스레드를 호스트하는 풀을 반환하거나 null 현재 스레드가 ForkJoinPool 외부에서 실행되는 경우 를 반환합니다.

QueuedTaskCount

현재 작업자 스레드에서 포크되었지만 아직 실행되지 않은 태스크의 예상 수를 반환합니다.

RawRawResult

이 작업이 비정상적으로 Join()완료되었거나 null 이 작업이 완료된 것으로 알려져 있지 않은 경우에도 에서 반환할 결과를 반환합니다.

SurplusQueuedTaskCount

현재 작업자 스레드에서 보유하고 있는 로컬 큐 작업이 다른 작업자 스레드보다 많거나 이 스레드가 ForkJoinPool에서 작동하지 않는 경우 0을 반환합니다.

ThresholdClass

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

ThresholdType

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

메서드

Adapt(ICallable)

지정된 Callable 의 메서드를 call 해당 작업으로 수행하고 에 대한 결과를 #join반환하는 새 ForkJoinTask 를 반환하여 확인된 예외를 로 RuntimeException변환합니다.

Adapt(IRunnable)

지정된 Runnable 의 메서드를 run 해당 작업으로 수행하고 에 null 결과를 반환하는 새 ForkJoinTask 를 반환합니다#join.

Adapt(IRunnable, Object)

지정된 Runnable 의 메서드를 run 해당 작업으로 수행하고 에 지정된 결과를 반환하는 새 ForkJoinTask 를 반환합니다#join.

Cancel(Boolean)

이 작업의 실행을 취소하려고 시도합니다.

Clone()

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

(다음에서 상속됨 Object)
CompareAndSetForkJoinTaskTag(Int16, Int16)

이 작업의 태그 값을 조건부로 설정합니다.

Complete(Object)

이 작업을 완료하고, 아직 중단되거나 취소되지 않은 경우 및 관련 작업의 후속 호출 join 결과로 지정된 값을 반환합니다.

CompleteExceptionally(Throwable)

이 작업을 비정상적으로 완료하고, 아직 중단되거나 취소되지 않은 경우 지정된 예외 join 가 및 관련 작업에 throw되도록 합니다.

Dispose()

내에서 실행되는 작업에 대한 추상 기본 클래스입니다 ForkJoinPool.

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

내에서 실행되는 작업에 대한 추상 기본 클래스입니다 ForkJoinPool.

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

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

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

이 메서드에서 반환될 때 이 작업이 완료되도록 보장되면 즉시 이 작업의 기본 작업을 수행하고 true를 반환합니다.

Fork()

현재 작업이 실행 중인 풀에서 이 작업을 비동기적으로 실행하도록 정렬합니다(해당하는 경우). 그렇지 않으면 #inForkJoinPoolForkJoinPool#commonPool() 사용합니다.

Get()

계산이 완료되기 위해 필요한 경우 기다린 다음 결과를 검색합니다.

Get(Int64, TimeUnit)

계산이 완료되기까지 지정된 시간 동안 필요한 경우 기다린 다음, 사용 가능한 경우 결과를 검색합니다.

GetHashCode()

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

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

현재 작업 ForkJoinPool#isQuiescent를 호스트하는 풀이 정지될 때까지 태스크를 실행할 수 있습니다.

InForkJoinPool()

현재 스레드가 ForkJoinWorkerThread ForkJoinPool 계산으로 실행되는 경우 를 반환 true 합니다.

Invoke()

이 작업을 수행하기 시작하고, 필요한 경우 완료를 기다리고, 결과를 반환하거나( 선택되지 않은) RuntimeException 또는 Error 기본 계산이 수행된 경우 을 throw합니다.

InvokeAll(ForkJoinTask, ForkJoinTask)

지정된 태스크를 포크하여 각 태스크에 대한 보류 또는 (선택되지 않은) 예외가 발생할 때 isDone 를 반환합니다. 이 경우 예외가 다시 throw됩니다.

InvokeAll(ForkJoinTask[])

지정된 컬렉션의 모든 태스크를 포크하여 각 태스크에 대한 보류 또는 (선택되지 않은) 예외가 발생할 때 isDone 를 반환합니다. 이 경우 예외가 다시 throw됩니다.

InvokeAll(ICollection)

지정된 컬렉션의 모든 태스크를 포크하여 각 태스크에 대한 보류 또는 (선택되지 않은) 예외가 발생할 때 isDone 를 반환합니다. 이 경우 예외가 다시 throw됩니다.

JavaFinalize()

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

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

#isDone 계산이 완료되면 계산 결과를 반환합니다.

Notify()

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

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

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

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

현재 스레드에서 큐에 대기하고 있지만 아직 실행되지 않은 작업(즉시 사용할 수 있는 경우)을 반환하지만 예약을 취소하거나 실행하지는 않습니다.

PollNextLocalTask()

현재 스레드가 ForkJoinPool에서 작동하는 경우 예약을 취소하고 실행하지 않고 현재 스레드에서 큐에 대기했지만 아직 실행되지 않은 다음 작업을 반환합니다.

PollTask()

현재 스레드가 ForkJoinPool에서 작동하는 경우 예약을 취소하고 실행하지 않고 현재 스레드에서 큐에 대기하고 아직 실행되지 않은 다음 작업을 반환합니다( 사용 가능한 경우 또는 사용할 수 없는 경우 다른 스레드에 의해 포크된 작업(사용 가능한 경우).

QuietlyComplete()

값을 설정하지 않고 이 작업을 정상적으로 완료합니다.

QuietlyInvoke()

이 작업을 시작하고 필요한 경우 결과를 반환하거나 예외를 throw하지 않고 완료를 기다립니다.

QuietlyJoin()

결과를 반환하거나 예외를 throw하지 않고 이 작업을 조인합니다.

Reinitialize()

이 작업의 내부 부기 상태를 다시 설정하여 후속 fork를 허용합니다.

SetForkJoinTaskTag(Int16)

이 작업의 태그 값을 원자성으로 설정하고 이전 값을 반환합니다.

SetHandle(IntPtr, JniHandleOwnership)

Handle 속성을 설정합니다.

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

지정된 값을 결과로 강제로 반환합니다.

ToArray<T>()

내에서 실행되는 작업에 대한 추상 기본 클래스입니다 ForkJoinPool.

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

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

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

실행을 위해 이 작업의 일정을 취소하려고 시도합니다.

UnregisterFromRuntime()

내에서 실행되는 작업에 대한 추상 기본 클래스입니다 ForkJoinPool.

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

현재 스레드가 각성될 때까지 대기하도록 합니다. 일반적으로 <알림을<> 받>거나<<> 중단/em>합니다.

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

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

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

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

(다음에서 상속됨 Object)

명시적 인터페이스 구현

IJavaPeerable.Disposed()

내에서 실행되는 작업에 대한 추상 기본 클래스입니다 ForkJoinPool.

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

내에서 실행되는 작업에 대한 추상 기본 클래스입니다 ForkJoinPool.

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

내에서 실행되는 작업에 대한 추상 기본 클래스입니다 ForkJoinPool.

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

내에서 실행되는 작업에 대한 추상 기본 클래스입니다 ForkJoinPool.

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

내에서 실행되는 작업에 대한 추상 기본 클래스입니다 ForkJoinPool.

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

내에서 실행되는 작업에 대한 추상 기본 클래스입니다 ForkJoinPool.

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

내에서 실행되는 작업에 대한 추상 기본 클래스입니다 ForkJoinPool.

(다음에서 상속됨 Object)

확장 메서드

JavaCast<TResult>(IJavaObject)

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

JavaCast<TResult>(IJavaObject)

내에서 실행되는 작업에 대한 추상 기본 클래스입니다 ForkJoinPool.

GetJniTypeName(IJavaPeerable)

내에서 실행되는 작업에 대한 추상 기본 클래스입니다 ForkJoinPool.

GetAsync(IFuture)

내에서 실행되는 작업에 대한 추상 기본 클래스입니다 ForkJoinPool.

GetAsync(IFuture, Int64, TimeUnit)

내에서 실행되는 작업에 대한 추상 기본 클래스입니다 ForkJoinPool.

적용 대상