ForkJoinPool 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
ExecutorService
,用於執行 ForkJoinTask
s。
[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
s。 提供 ForkJoinPool
來自非ForkJoinTask
用戶端之提交的進入點,以及管理和監視作業。
ForkJoinPool
與其他類型ExecutorService
不同,主要因為採用<em>work-stealing</em> 而有所不同:集區中的所有線程都會嘗試尋找和執行提交至集區和/或由其他使用中工作所建立的工作(最終會封鎖在不存在時等候工作)。 當大部分的工作繁衍其他子工作時, ForkJoinTask
以及從外部用戶端提交許多小型工作時,這可讓您有效率地進行處理。 特別是在建構函式中將 em>asyncMode</em> 設定<為 true 時,ForkJoinPool
s 也可能適合用於從未加入的事件樣式工作。 所有背景工作線程都會使用 Thread#isDaemon
set true
初始化。
靜態 #commonPool()
可供使用,且適用於大部分的應用程式。 未明確提交至指定集區的任何 ForkJoinTask 會使用通用集區。 使用通用集區通常會減少資源使用量(其線程會在非使用期間緩慢回收,並在後續使用時恢復)。
對於需要個別或自定義集區的應用程式, ForkJoinPool
可以使用指定的目標平行處理原則層級來建構 ;根據預設,等於可用的處理器數目。 集區會嘗試藉由動態新增、暫停或繼續內部背景工作線程來維護足夠的作用中線程(或可用),即使有些工作已停止等候加入其他線程。 不過,在遭到封鎖的 I/O 或其他非受控同步處理時,不保證有這類調整。 巢狀 ManagedBlocker
介面可讓您擴充所容納的同步處理類型。 您可以使用建構函式來覆寫默認原則,其參數對應至 類別 ThreadPoolExecutor
中記載的參數。
除了執行和生命週期管理方法之外,這個類別還提供狀態檢查方法(例如 #getStealCount
),這些方法旨在協助開發、微調和監視分支/聯結應用程式。 此外,方法 #toString
會以方便的形式傳回集區狀態的指示,以進行非正式監視。
如同其他 ExecutorServices 的情況,下表摘要說明三個主要工作執行方法。 這些設計主要是供尚未參與目前集區中分叉/聯結計算的用戶端使用。 這些方法的主要形式也接受的 ForkJoinTask
實例,但多載體也允許混合執行純 Runnable
文本或 Callable
型活動。 不過,在集區中執行的工作通常應該改用數據表中所列的計算表單,除非使用通常未聯結的異步事件樣式工作,在此情況下,方法的選擇沒有什麼差異。
<table class=“plain”>caption task execution methods</caption<>tr<>td/td><<> th scope=“col”> Call from non-fork/join clients</th<>scope=“col” Call from in fork/join computations</th></tr tr<><>th scope=“row” style=“text-align:left”>> Arrange async execution</th><td<>#execute(ForkJoinTask)
/td td/td>>><<ForkJoinTask#fork
><</tr><tr>th scope=“row” style=“text-align:left”> Await and obtain result</th><td><#invoke(ForkJoinTask)
/td></tdForkJoinTask#invoke
<><>/tr tr>><<th scope=“row” style=“text-align:left”> Arrange exec and obtain Future</th><td<>#submit(ForkJoinTask)
/td>><ForkJoinTask#fork
td (ForkJoinTasks <em>are</em> Futures)</td></tr<>/table<>
用來建構通用集區的參數可藉由設定下列 System#getProperty 系統屬性來控制: <ul><li>java.util.concurrent.ForkJoinPool.common.parallelism
- 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
啟用的處理站提供線程。
在建立這些設定時發生任何錯誤時,會使用預設參數。 將平行處理原則屬性設定為零,以及/或使用可能傳回 null
的處理站,可以停用或限制在通用集區中使用線程。 不過,這樣做可能會導致永遠不會執行未加入的工作。
<b>實作注意事項:</b> 此實作會將執行中的線程數目上限限制為 32767。 嘗試建立大於 的最大數目結果的集區 IllegalArgumentException
。
只有在集區關閉或內部資源已用盡時, 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 物件的 Managed 表示法時使用的建構函式;由運行時間呼叫。 |
屬性
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() |
讓目前線程等候直到喚醒為止,通常是藉由em <notified/em>或<em>interrupted</em> 來喚醒它。<> (繼承來源 Object) |
Wait(Int64) |
讓目前的線程等到喚醒為止,通常是因為 <em>notified</em> 或 <em>interrupted</em>,或直到經過一定數量的實時為止。 (繼承來源 Object) |
Wait(Int64, Int32) |
讓目前的線程等到喚醒為止,通常是因為 <em>notified</em> 或 <em>interrupted</em>,或直到經過一定數量的實時為止。 (繼承來源 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) |
|