ForkJoinPool 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
ExecutorService
실행ForkJoinTask
용입니다.
[Android.Runtime.Register("java/util/concurrent/ForkJoinPool", DoNotGenerateAcw=true)]
public class ForkJoinPool : Java.Util.Concurrent.AbstractExecutorService
[<Android.Runtime.Register("java/util/concurrent/ForkJoinPool", DoNotGenerateAcw=true)>]
type ForkJoinPool = class
inherit AbstractExecutorService
- 상속
- 특성
설명
ExecutorService
실행ForkJoinTask
용입니다. A ForkJoinPool
는 관리 및 모니터링 작업뿐만 아니라 비ForkJoinTask
클라이언트의 제출에 대한 진입점을 제공합니다.
A ForkJoinPool
는 주로 em>work-stealing</em>을 사용함으로써 <다른 종류의 다른 종류 ExecutorService
와 다릅니다. 풀의 모든 스레드는 풀에 제출되거나 다른 활성 작업에 의해 생성된 작업을 찾아 실행하려고 시도합니다(결국 작업이 없는 경우 대기를 차단). 이렇게 하면 대부분의 태스크가 다른 하위 작업을 생성할 때(대부분 ForkJoinTask
처럼) 효율적으로 처리할 수 있을 뿐만 아니라 많은 작은 작업이 외부 클라이언트에서 풀에 제출될 때도 효율적으로 처리할 수 있습니다. 특히 생성자ForkJoinPool
에서 em>asyncMode</em>을 true로 설정하는 <경우 s는 조인되지 않은 이벤트 스타일 작업에 사용하기에 적합할 수도 있습니다. 모든 작업자 스레드는 집합true
을 사용하여 Thread#isDaemon
초기화됩니다.
정적 #commonPool()
은 사용 가능하며 대부분의 애플리케이션에 적합합니다. 공용 풀은 지정된 풀에 명시적으로 제출되지 않은 ForkJoinTask에서 사용됩니다. 일반적으로 공용 풀을 사용하면 리소스 사용량이 줄어듭니다(해당 스레드는 사용되지 않는 기간 동안 천천히 회수되고 이후 사용 시 복원됨).
별도의 풀 또는 사용자 지정 풀 ForkJoinPool
이 필요한 애플리케이션의 경우 지정된 대상 병렬 처리 수준으로 생성될 수 있습니다. 기본적으로 사용 가능한 프로세서 수와 같습니다. 풀은 일부 작업이 다른 작업에 조인되기 위해 대기하는 동안 중단된 경우에도 내부 작업자 스레드를 동적으로 추가, 일시 중단 또는 다시 시작하면 충분한 활성(또는 사용 가능한) 스레드를 유지하려고 시도합니다. 그러나 차단된 I/O 또는 기타 관리되지 않는 동기화가 발생할 경우 이러한 조정이 보장되지 않습니다. 중첩된 ManagedBlocker
인터페이스를 사용하면 수용된 동기화 종류의 확장을 사용할 수 있습니다. 클래스 ThreadPoolExecutor
에 설명된 매개 변수가 있는 생성자를 사용하여 기본 정책을 재정의할 수 있습니다.
이 클래스는 실행 및 수명 주기 제어 메서드 외에도 포크/조인 애플리케이션을 개발, 튜닝 및 모니터링하는 데 도움이 되는 상태 검사 메서드(예 #getStealCount
: )를 제공합니다. 또한 메서드 #toString
는 비공식적인 모니터링을 위해 편리한 형태로 풀 상태의 표시를 반환합니다.
다른 ExecutorServices의 경우와 마찬가지로 다음 표에 요약된 세 가지 주요 작업 실행 방법이 있습니다. 이는 현재 풀에서 포크/조인 계산에 아직 참여하지 않은 클라이언트에서 주로 사용하도록 설계되었습니다. 이러한 메서드의 기본 형식은 인스턴스를 ForkJoinTask
허용하지만 오버로드된 양식은 일반 Runnable
또는 Callable
기반 활동의 혼합 실행도 허용합니다. 그러나 풀에서 이미 실행 중인 태스크는 일반적으로 조인되지 않는 비동기 이벤트 스타일 작업을 사용하지 않는 한 일반적으로 테이블에 나열된 계산 내 양식을 사용해야 합니다. 이 경우 선택한 메서드 간에 차이가 거의 없습니다.
<table class="plain">caption Summary of task execution methods</caption><tr><td></td><th scope="col"> Call from non-fork/join clients</th<>th scope="col"> Call from fork/join computations</th<>/tr tr tr<<>>th scope="row" style="text-align:left"> Arrange async execution</th><td><#execute(ForkJoinTask)
/td td></td/td>><ForkJoinTask#fork
><</tr><tr><th scope="row" style="text-align:left"> Await 및 obtain result</th><td>#invoke(ForkJoinTask)
</td<><>ForkJoinTask#invoke
/td<>/tr tr tr><<>th scope="row" style="text-align:left"> Arrange exec and obtain Future</th><td><#submit(ForkJoinTask)
/td><td>ForkJoinTask#fork
(ForkJoinTasks em>are</em> Futures<)</td<>/tr></table>
공통 풀을 생성하는 데 사용되는 매개 변수는 System#getProperty 시스템 속성을 설정하여 제어할 수 있습니다. <ul><lijava.util.concurrent.ForkJoinPool.common.parallelism
> - 병렬 처리 수준, 음수가 아닌 정수 <li>java.util.concurrent.ForkJoinPool.common.threadFactory
- 클래스 이름.ForkJoinWorkerThreadFactory
ClassLoader#getSystemClassLoader() 시스템 클래스 로더를 사용하여 이 클래스를 로드합니다. <li>java.util.concurrent.ForkJoinPool.common.exceptionHandler
- 의 클래스 이름입니다 UncaughtExceptionHandler
. ClassLoader#getSystemClassLoader() 시스템 클래스 로더를 사용하여 이 클래스를 로드합니다. <li>java.util.concurrent.ForkJoinPool.common.maximumSpares
- 대상 병렬 처리를 유지하기 위해 허용되는 최대 추가 스레드 수(기본값 256)입니다. </ul> 시스템 속성을 통해 스레드 팩터리를 제공하지 않으면 공용 풀은 시스템 클래스 로더를 Thread#getContextClassLoader() 스레드 컨텍스트 클래스 로더로 사용하는 팩터리를 사용합니다. 또한 있는 SecurityManager
경우 공용 풀은 활성화되지 않은 Permissions
스레드를 제공하는 팩터리를 사용합니다.
이러한 설정을 설정하는 동안 오류가 발생하면 기본 매개 변수가 사용됩니다. 병렬 처리 속성을 0으로 설정하거나 반환 null
할 수 있는 팩터리를 사용하여 공용 풀에서 스레드 사용을 사용하지 않도록 설정하거나 제한할 수 있습니다. 그러나 이렇게 하면 조인되지 않은 작업이 실행되지 않을 수 있습니다.
<b>구현 정보:</b> 이 구현은 실행 중인 스레드의 최대 수를 32767로 제한합니다. 최대 개수보다 큰 풀을 만들려고 하면 결과가 발생합니다 IllegalArgumentException
.
이 구현은 풀이 종료되거나 내부 리소스가 소진된 경우에만 제출된 작업(즉, throw) RejectedExecutionException
을 거부합니다.
1.7에 추가되었습니다.
에 대한 java.util.concurrent.ForkJoinPool
Java 설명서
이 페이지의 일부는 Android 오픈 소스 프로젝트에서 만들고 공유하고 Creative Commons 2.5 특성 라이선스에 설명된 용어에 따라 사용되는 작업을 기반으로 하는 수정 사항입니다.
생성자
ForkJoinPool() |
|
ForkJoinPool(Int32) |
|
ForkJoinPool(Int32, ForkJoinPool+IForkJoinWorkerThreadFactory, Thread+IUncaughtExceptionHandler, Boolean) |
|
ForkJoinPool(Int32, ForkJoinPool+IForkJoinWorkerThreadFactory, Thread+IUncaughtExceptionHandler, Boolean, Int32, Int32, Int32, IPredicate, Int64, TimeUnit) |
|
ForkJoinPool(IntPtr, JniHandleOwnership) |
JNI 개체의 관리되는 표현을 만들 때 사용되는 생성자입니다. 런타임에서 호출합니다. |
속성
ActiveThreadCount |
현재 작업을 훔치거나 실행하는 스레드 수의 예상값을 반환합니다. |
AsyncMode |
이 풀이 조인되지 않은 포크된 작업에 로컬 선입선 실행 일정 모드를 사용하는 경우를 반환 |
Class |
이 |
CommonPoolParallelism |
공용 풀의 대상 병렬 처리 수준을 반환합니다. |
DefaultForkJoinWorkerThreadFactory |
새 ForkJoinWorkerThread를 만듭니다. |
Factory |
새 작업자를 생성하는 데 사용되는 팩터리를 반환합니다. |
Handle |
기본 Android 인스턴스에 대한 핸들입니다. (다음에서 상속됨 Object) |
HasQueuedSubmissions |
|
IsQuiescent |
모든 작업자 스레드가 현재 유휴 상태인지를 반환 |
IsShutdown |
이 풀이 종료되었는지를 반환 |
IsTerminated |
종료 후 모든 작업이 완료되었는지를 반환 |
IsTerminating |
종료 프로세스가 시작되었지만 아직 완료되지 않은 경우 반환 |
JniIdentityHashCode |
|
JniPeerMembers |
|
Parallelism |
이 풀의 대상 병렬 처리 수준을 반환합니다. |
PeerReference |
|
PoolSize |
시작되었지만 아직 종료되지 않은 작업자 스레드 수를 반환합니다. |
QueuedSubmissionCount |
아직 실행을 시작하지 않은 이 풀에 제출된 작업의 예상 수를 반환합니다. |
QueuedTaskCount |
작업자 스레드가 큐에 현재 보유하고 있는 총 작업 수의 예상을 반환합니다(실행이 시작되지 않은 풀에 제출된 작업은 포함하지 않음). |
RunningThreadCount |
작업 조인 대기 또는 기타 관리되는 동기화를 위해 차단되지 않은 작업자 스레드의 예상 수를 반환합니다. |
StealCount |
제출자가 아닌 스레드에 의해 실행된 완료된 작업의 총 개수에 대한 예상을 반환합니다. |
ThresholdClass |
이 API는 Android용 Mono 인프라를 지원하며 코드에서 직접 사용할 수 없습니다. |
ThresholdType |
이 API는 Android용 Mono 인프라를 지원하며 코드에서 직접 사용할 수 없습니다. |
UncaughtExceptionHandler |
작업을 실행하는 동안 복구할 수 없는 오류로 인해 종료되는 내부 작업자 스레드에 대한 처리기를 반환합니다. |
메서드
AwaitQuiescence(Int64, TimeUnit) |
이 풀에서 작동하는 ForkJoinTask에 의해 호출되는 경우 적용에 해당합니다 |
AwaitTermination(Int64, TimeUnit) |
종료 요청 후 모든 태스크가 실행을 완료하거나 시간 제한이 발생하거나 현재 스레드가 중단될 때까지 차단합니다. |
AwaitTerminationAsync(Int64, TimeUnit) |
|
Clone() |
이 개체의 복사본을 만들고 반환합니다. (다음에서 상속됨 Object) |
CommonPool() |
공통 풀 인스턴스를 반환합니다. |
Dispose() |
|
Dispose(Boolean) |
|
DrainTasksTo(ICollection<ForkJoinTask>) |
큐 예약에서 사용 가능한 미해결 제출 및 포크된 작업을 모두 제거하고 실행 상태를 변경하지 않고 지정된 컬렉션에 추가합니다. |
Equals(Object) |
다른 개체가 이 개체와 "같음"인지 여부를 나타냅니다. (다음에서 상속됨 Object) |
Execute(ForkJoinTask) |
지정된 작업의 (비동기) 실행을 정렬합니다. |
Execute(IRunnable) | |
GetHashCode() |
개체에 대한 해시 코드 값을 반환합니다. (다음에서 상속됨 Object) |
Invoke(ForkJoinTask) |
지정된 작업을 수행하고 완료 시 결과를 반환합니다. |
InvokeAll(ICollection) |
|
InvokeAll(ICollection, Int64, TimeUnit) |
|
InvokeAny(ICollection) |
|
InvokeAny(ICollection, Int64, TimeUnit) |
|
JavaFinalize() |
가비지 수집에서 개체에 대한 참조가 더 이상 없다고 판단할 때 개체의 가비지 수집기에서 호출됩니다. (다음에서 상속됨 Object) |
ManagedBlock(ForkJoinPool+IManagedBlocker) |
지정된 차단 작업을 실행합니다. |
NewTaskFor(ICallable) |
|
NewTaskFor(IRunnable, Object) |
|
Notify() |
이 개체의 모니터에서 대기 중인 단일 스레드를 해제합니다. (다음에서 상속됨 Object) |
NotifyAll() |
이 개체의 모니터에서 대기 중인 모든 스레드를 해제합니다. (다음에서 상속됨 Object) |
PollSubmission() |
사용할 수 있는 경우 다음 미해제 제출을 제거하고 반환합니다. |
SetHandle(IntPtr, JniHandleOwnership) |
Handle 속성을 설정합니다. (다음에서 상속됨 Object) |
Shutdown() |
이전에 제출한 태스크가 실행되는 순서대로 종료를 시작할 수 있지만 새 작업은 허용되지 않습니다. |
ShutdownNow() |
모든 작업을 취소 및/또는 중지하고 이후에 제출된 모든 작업을 거부하려고 할 수 있습니다. |
Submit(ForkJoinTask) |
실행을 위해 ForkJoinTask를 제출합니다. |
Submit(ICallable) |
|
Submit(IRunnable) |
실행을 위해 실행 가능한 태스크를 제출하고 해당 작업을 나타내는 Future를 반환합니다. (다음에서 상속됨 AbstractExecutorService) |
Submit(IRunnable, Object) |
|
ToArray<T>() |
|
ToString() |
개체의 문자열 표현을 반환합니다. (다음에서 상속됨 Object) |
UnregisterFromRuntime() |
|
Wait() |
현재 스레드가 각성될 때까지 대기하게 하며, 일반적으로 <알림을 받<>거나 <><중단/종료>합니다.> (다음에서 상속됨 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) |
|
AwaitTerminationAsync(IExecutorService, Int64, TimeUnit) |
|
InvokeAnyAsync(IExecutorService, ICollection) |
|
InvokeAnyAsync(IExecutorService, ICollection, Int64, TimeUnit) |
|