ForkJoinPool 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
An 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
- 繼承
- 屬性
備註
An ExecutorService 用於跑步 ForkJoinTask。 A ForkJoinPool 提供非客戶提交ForkJoinTask 資料的入口,以及管理與監控作業。
A ForkJoinPool 與其他類型的 主要 ExecutorService 不同在於採用 <em>工作竊取</em>:池中的所有執行緒都會嘗試尋找並執行提交到池中及/或其他活躍任務所產生的任務(若沒有工作,最終會阻擋等待工作)。 當大多數任務會產生其他子任務(如同大多數 ForkJoinTasks 一樣),以及當外部客戶端提交許多小任務到池時,這能讓處理更有效率。 特別是在建構子中將 asyncMode</em> 設<>為 true 時,ForkJoinPools 也可能適合用於從未被連結的事件型任務。 所有工作執行緒皆初始化為 Thread#isDaemon 。true
靜態 #commonPool() 方案可用且適用於大多數應用。 共用池會被任何未明確提交到指定池的 ForkJoinTask 使用。 使用共用池通常能減少資源使用(其執行緒會在閒置期間慢慢回收,並在下一次使用時恢復)。
對於需要獨立或自訂池的應用, ForkJoinPool 可以建構出給定的目標平行等級;預設情況下,等於可用處理器的數量。 池會嘗試透過動態新增、暫停或恢復內部工作執行緒來維持足夠的活躍(或可用)執行緒,即使某些任務因等待加入其他執行緒而停滯。 然而,面對阻擋的 I/O 或其他非管理同步,無法保證會有此類調整。 巢狀 ManagedBlocker 介面允許擴展可容納的同步類型。 預設策略可使用與類別 ThreadPoolExecutor中描述參數對應的建構子來覆寫。
除了執行與生命週期控制方法外,本類別還提供狀態檢查方法(例如 #getStealCount),旨在協助開發、調整及監控分支/連接應用程式。 此外,方法 #toString 會以方便的形式回傳池狀狀態的指標,方便非正式監控。
與其他執行服務相同,下表總結了三種主要的任務執行方法。 這些系統主要設計給尚未參與當前分叉/連接運算的客戶端使用。 這些方法的主要形式接受 的 ForkJoinTask實例,但過載形式也允許混合執行純 Runnable或 Callable的活動。 然而,已在池中執行的任務通常應改用表中列出的計算內表單,除非使用通常不合併的非同步事件型任務,此時方法選擇差異不大。
<table class=“plain”>caption<任務執行方法>摘要/caption<>tr<>td</td><>th scope=“col”< 非 fork/join 客戶端/th scope = “col”> 從 fork/join clients</th><scope 呼叫 fork/join computations>/th<>/tr<>tr<>th scope =“row” style=“text-align:left”< 安排非同步執行>/th<>td<>#execute(ForkJoinTask)/td<>td<>ForkJoinTask#fork/td<></tr><tr>th scope=“row” style=“text-align:left”< 等待並取得結果>/th<>td<>#invoke(ForkJoinTask)/td<>td<>ForkJoinTask#invoke/td<>/tr<>tr th<>scope =“row” style=“text-align:left”< Arrange exec 並取得 Future>/th<>td<>#submit(ForkJoinTask)/td<>td<>(ForkJoinTasks ForkJoinTask#forkem<are>/em< Futures)>/td<>/tr<>/table<>
用於構造共用池的參數可透過設定以下 System#getProperty 系統屬性來控制:<ul><li>java.util.concurrent.ForkJoinPool.common.parallelism - 平行度層級,非負整數 <li>java.util.concurrent.ForkJoinPool.common.threadFactory - 類別名稱。ForkJoinWorkerThreadFactory ClassLoader#getSystemClassLoader() 系統類別載入器用於載入此類別。
<LI>java.util.concurrent.ForkJoinPool.common.exceptionHandler - A UncaughtExceptionHandler的類別名稱。 ClassLoader#getSystemClassLoader() 系統類別載入器用於載入此類別。
<LI>java.util.concurrent.ForkJoinPool.common.maximumSpares - 為維持目標平行性所允許的最大額外執行緒數(預設 256)。
</ul> 如果系統屬性未提供執行緒工廠,則共用池會使用一個工廠,該工廠使用系統類別載入器作為 Thread#getContextClassLoader() 執行緒上下文類別載入器。 此外,若存在 a SecurityManager ,則共用池會使用工廠,供應未 Permissions 啟用且不保證能在任務間保留變數值 java.lang.ThreadLocal 的執行緒。
若設定錯誤,則使用預設參數。 可以透過將平行性屬性設為零,和/或使用可能回傳 null的工廠來停用或限制共用池中執行緒的使用。 然而,這樣做可能會導致未連接的任務永遠無法執行。
在 1.7 版本中加入。
的 java.util.concurrent.ForkJoinPoolJava 檔。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。
建構函式
| 名稱 | Description |
|---|---|
| ForkJoinPool() |
利用所有其他參數的預設值,建立 |
| ForkJoinPool(Int32, ForkJoinPool+IForkJoinWorkerThreadFactory, Thread+IUncaughtExceptionHandler, Boolean, Int32, Int32, Int32, IPredicate, Int64, TimeUnit) |
建立一個包含給定參數的 ForkJoinPool。 |
| ForkJoinPool(Int32, ForkJoinPool+IForkJoinWorkerThreadFactory, Thread+IUncaughtExceptionHandler, Boolean) |
使用 #defaultForkJoinWorkerThreadFactory 預設執行緒工廠、無 UncaughtExceptionHandler 及非非同步 LIFO 處理模式,建立 |
| ForkJoinPool(Int32) |
建立 具有指示平行程度的 , |
| ForkJoinPool(IntPtr, JniHandleOwnership) |
建立 JNI 物件的 Managed 表示法時使用的建構函式;由運行時間呼叫。 |
屬性
| 名稱 | Description |
|---|---|
| ActiveThreadCount |
回傳目前竊取或執行任務的執行緒數量估計值。 |
| AsyncMode |
若此池使用本地先入先出排程模式,則會回傳 |
| Class |
傳回這個 |
| CommonPoolParallelism |
回傳公共池的目標平行度等級。 |
| DefaultForkJoinWorkerThreadFactory |
建立一個新的 ForkJoinWorkerThread。 |
| Factory |
歸還用於製造新工人的工廠。 |
| Handle |
基礎Android實例的句柄。 (繼承來源 Object) |
| HasQueuedSubmissions |
如果有提交到此池但尚未開始執行的任務,則會回傳 |
| IsQuiescent |
如果所有工作執行緒目前都處於閒置狀態,則會回傳 |
| IsShutdown |
如果這個池子已經關閉,還要退貨 |
| IsTerminated |
關閉後所有任務都完成後,會回傳 |
| IsTerminating |
若終止程序已開始但尚未完成,則可退稅 |
| JniIdentityHashCode |
取得由互通執行時指派給此 Java 對等端的身份雜湊碼。 (繼承來源 Object) |
| JniManagedPeerState |
An |
| JniPeerMembers |
An |
| Parallelism |
回傳該池的目標平行度等級。 |
| PeerReference |
取得這個 Java 節點的 JNI 物件參考。 (繼承來源 Object) |
| PoolSize |
回傳已開始但尚未終止的工作執行緒數量。 |
| QueuedSubmissionCount |
回傳尚未開始執行的任務數量估計。 |
| QueuedTaskCount |
回傳目前由工作執行緒佇列中保留的任務總數估計(但不包括尚未開始執行的任務)。 |
| RunningThreadCount |
回傳未被阻塞、等待加入任務或其他管理同步工作者執行緒數量的估計值。 |
| StealCount |
回傳一個由非提交者執行的執行緒執行的完成任務總數估計值。 |
| ThresholdClass |
此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。 |
| ThresholdType |
此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。 |
| UncaughtExceptionHandler |
回傳因執行任務時遇到無法恢復錯誤而終止的內部工作執行緒的處理器。 |
方法
| 名稱 | Description |
|---|---|
| AwaitQuiescence(Int64, TimeUnit) |
若由操作此池中的 ForkJoinTask 呼叫,實際上 |
| AwaitTermination(Int64, TimeUnit) |
在關閉請求後所有任務完成執行、逾時發生或當前執行緒中斷(以先發生者為準)為止。 |
| AwaitTerminationAsync(Int64, TimeUnit) |
An |
| Clone() |
建立並傳回這個 對象的複本。 (繼承來源 Object) |
| Close() |
除非是 |
| CommonPool() |
回傳公共池實例。 |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
An |
| Dispose() |
釋放該 Java 節點所持有的資源。 (繼承來源 Object) |
| Dispose(Boolean) |
釋放該 Java 節點所持有的資源。 (繼承來源 Object) |
| DisposeUnlessReferenced() |
An |
| DrainTasksTo(ICollection<ForkJoinTask>) |
移除所有未執行、已提交及分支的任務,從排程佇列中移除,並將其加入指定集合,且不改變執行狀態。 |
| Equals(Object) |
An |
| Equals(Object) |
指出其他物件是否「等於」這個物件。 (繼承來源 Object) |
| Execute(ForkJoinTask) |
安排(非同步)執行指定任務。 |
| Execute(IRunnable) | |
| ExternalSubmit(ForkJoinTask) |
將指定任務提交給定的任務,彷彿非客戶提交 |
| GetHashCode() |
傳回此物件的雜湊碼值。 (繼承來源 Object) |
| Invoke(ForkJoinTask) |
執行指定任務,完成後返回結果。 |
| InvokeAll(ICollection, Int64, TimeUnit) |
執行指定任務,並在所有任務完成或超時結束時(以先發生者為準)返回一份保存狀態與結果的未來清單。 (繼承來源 AbstractExecutorService) |
| InvokeAll(ICollection) |
執行指定任務,完成後回傳一份包含狀態與結果的未來清單。 (繼承來源 AbstractExecutorService) |
| InvokeAny(ICollection, Int64, TimeUnit) |
執行給定任務,若有任務在逾時期內完成,則回傳成功完成的任務結果(即未拋出例外)。 (繼承來源 AbstractExecutorService) |
| InvokeAny(ICollection) |
執行給定任務,若有任務成功完成(即未拋出例外),則回傳結果。 (繼承來源 AbstractExecutorService) |
| JavaFinalize() |
已淘汰.
當垃圾收集決定不再參考物件時,垃圾收集行程在 物件上呼叫。 (繼承來源 Object) |
| LazySubmit(ForkJoinTask) |
提交給定任務時,無法保證在沒有可用活躍執行緒時該任務最終會執行。 |
| ManagedBlock(ForkJoinPool+IManagedBlocker) |
執行可能阻塞的任務。 |
| NewTaskFor(ICallable) |
回傳給定可呼叫任務的 a |
| NewTaskFor(IRunnable, Object) |
回傳給定可執行且預設值的 a |
| Notify() |
喚醒正在等候此物件監視器的單一線程。 (繼承來源 Object) |
| NotifyAll() |
喚醒正在等候此物件監視器的所有線程。 (繼承來源 Object) |
| PollSubmission() |
若有下一次未執行的提交,則移除並回傳。 |
| SetHandle(IntPtr, JniHandleOwnership) |
設定 Handle 屬性。 (繼承來源 Object) |
| SetParallelism(Int32) |
改變此池的目標平行性,控制未來工作執行緒的建立、使用與終止。 |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
An |
| Shutdown() |
可能會啟動有序的關機,執行先前提交的任務,但不會接受新的任務。 |
| ShutdownNow() |
可能會嘗試取消和/或停止所有任務,並拒絕所有後續提交的任務。 |
| Submit(ForkJoinTask) |
提交一個 forkJoinTask 進行執行。 |
| Submit(ICallable) |
提交一個值回傳任務以供執行,並回傳一個代表該任務待處理結果的未來。 (繼承來源 AbstractExecutorService) |
| Submit(IRunnable, Object) |
提交一個可執行的任務,並回傳代表該任務的 Future。 (繼承來源 AbstractExecutorService) |
| Submit(IRunnable) |
提交一個可執行的任務,並回傳代表該任務的 Future。 (繼承來源 AbstractExecutorService) |
| ToArray<T>() |
從這個 Java 陣列包裝器建立一個受管理陣列。 (繼承來源 Object) |
| ToString() |
傳回物件的字串表示。 (繼承來源 Object) |
| UnregisterFromRuntime() |
將此 Java 節點從互通執行時中取消註冊。 (繼承來源 Object) |
| Wait() |
讓目前線程等候直到喚醒為止,通常是藉由em <notified/em>或<em>interrupted</em> 來喚醒它。<> (繼承來源 Object) |
| Wait(Int64, Int32) |
讓目前的線程等到喚醒為止,通常是因為 <em>notified</em> 或 <em>interrupted</em>,或直到經過一定數量的實時為止。 (繼承來源 Object) |
| Wait(Int64) |
讓目前的線程等到喚醒為止,通常是因為 <em>notified</em> 或 <em>interrupted</em>,或直到經過一定數量的實時為止。 (繼承來源 Object) |
明確介面實作
| 名稱 | Description |
|---|---|
| IJavaPeerable.Disposed() |
An |
| IJavaPeerable.Finalized() |
An |
| IJavaPeerable.JniObjectReferenceControlBlock |
An |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
An |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
An |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
An |
| IJavaPeerable.UnregisterFromRuntime() |
An |
擴充方法
| 名稱 | Description |
|---|---|
| AwaitTerminationAsync(IExecutorService, Int64, TimeUnit) |
An |
| GetJniTypeName(IJavaPeerable) |
取得實例 |
| InvokeAnyAsync(IExecutorService, ICollection, Int64, TimeUnit) |
An |
| InvokeAnyAsync(IExecutorService, ICollection) |
An |
| JavaAs<TResult>(IJavaPeerable) |
試著強制 |
| JavaCast<TResult>(IJavaObject) |
執行 Android 執行時間檢查的類型轉換。 |
| JavaCast<TResult>(IJavaObject) |
An |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
試著強制 |