IExecutorService 介面
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
A Executor 提供管理終止的方法,以及能產生 Future 追蹤一個或多個非同步任務進度的方法。
[Android.Runtime.Register("java/util/concurrent/ExecutorService", "", "Java.Util.Concurrent.IExecutorServiceInvoker")]
public interface IExecutorService : IDisposable, Java.Interop.IJavaPeerable, Java.Util.Concurrent.IExecutor
[<Android.Runtime.Register("java/util/concurrent/ExecutorService", "", "Java.Util.Concurrent.IExecutorServiceInvoker")>]
type IExecutorService = interface
interface IExecutor
interface IJavaObject
interface IDisposable
interface IJavaPeerable
- 衍生
- 屬性
- 實作
備註
A Executor 提供管理終止的方法,以及能產生 Future 追蹤一個或多個非同步任務進度的方法。
ExecutorService An 可能會被關閉,這會導致它拒絕新的任務。 有兩種不同的方法用於關閉 ExecutorService。 此 #shutdown 方法允許先前提交的任務在終止前執行,同時 #shutdownNow 防止等待任務開始並嘗試停止目前執行中的任務。 終止時,執行者沒有正在執行的任務、等待執行的任務,且無法提交新的任務。 未使用的 ExecutorService 設備應該關閉,以便回收其資源。
方法submit透過建立並回傳Future一個可以用來取消執行和/或等待完成的基礎方法來擴展基礎方法Executor#execute(Runnable)。 方法 invokeAny 和 invokeAll 執行最常用的批量執行形式,執行一組任務,然後等待至少一個或全部完成。 (類別 ExecutorCompletionService 可用來撰寫這些方法的客製化變體。)
該 Executors 類別提供本套件中執行器服務的工廠方法。
<h2>使用範例</h2>
這裡有一個網路服務的草圖,其中執行緒池中的執行緒會接收收到的請求。 它使用預先設定 Executors#newFixedThreadPool 的工廠方法:
{@code
class NetworkService implements Runnable {
private final ServerSocket serverSocket;
private final ExecutorService pool;
public NetworkService(int port, int poolSize)
throws IOException {
serverSocket = new ServerSocket(port);
pool = Executors.newFixedThreadPool(poolSize);
}
public void run() { // run the service
try {
for (;;) {
pool.execute(new Handler(serverSocket.accept()));
}
} catch (IOException ex) {
pool.shutdown();
}
}
}
class Handler implements Runnable {
private final Socket socket;
Handler(Socket socket) { this.socket = socket; }
public void run() {
// read and service request on socket
}
}}
ExecutorService也可以建立並關閉(關閉、阻塞直到終止)方式如下;以不同的Executors工廠方法說明:
{@code
try (ExecutorService e = Executors.newWorkStealingPool()) {
// submit or execute many tasks with e ...
}}
此外,還能進行進一步的客製化。 例如,以下方法分兩階段關閉 , ExecutorService 首先呼叫 shutdown 以拒絕接收的任務,然後如有需要呼叫 shutdownNow,取消任何未完成的任務:
{@code
void shutdownAndAwaitTermination(ExecutorService pool) {
pool.shutdown(); // Disable new tasks from being submitted
try {
// Wait a while for existing tasks to terminate
if (!pool.awaitTermination(60, TimeUnit.SECONDS)) {
pool.shutdownNow(); // Cancel currently executing tasks
// Wait a while for tasks to respond to being cancelled
if (!pool.awaitTermination(60, TimeUnit.SECONDS))
System.err.println("Pool did not terminate");
}
} catch (InterruptedException ex) {
// (Re-)Cancel if current thread also interrupted
pool.shutdownNow();
// Preserve interrupt status
Thread.currentThread().interrupt();
}
}}
記憶體一致性效應:在將 or Callable 任務提交Runnable給<ExecutorService i<>> 之前,執行緒中的動作發生於該任務所採取的任何行動,而這些動作又在結果被檢索之前Future.get()發生。
已在1.5中新增。
Java 文件 java.util.concurrent.ExecutorService。
此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。
屬性
| 名稱 | Description |
|---|---|
| Handle |
取得底層 Android 物件的 JNI 值。 (繼承來源 IJavaObject) |
| IsShutdown |
如果該執行人已被關閉,則會退貨 |
| IsTerminated |
關閉後所有任務都完成後,會回傳 |
| JniIdentityHashCode |
回傳包裹實例的 |
| JniManagedPeerState |
管理貴族的狀況。 (繼承來源 IJavaPeerable) |
| JniObjectReferenceControlBlock |
A |
| JniPeerMembers |
成員存取與召喚支援。 (繼承來源 IJavaPeerable) |
| PeerReference |
回傳JniObjectReference包裹後的 Java 物件實例。 (繼承來源 IJavaPeerable) |
方法
| 名稱 | Description |
|---|---|
| AwaitTermination(Int64, TimeUnit) |
在關閉請求後所有任務完成執行、逾時發生或當前執行緒中斷(以先發生者為準)為止。 |
| Close() |
啟動有序關機,執行先前提交的任務,但不再接受新的任務。 |
| Disposed() |
當實例被處理後才被召喚。 (繼承來源 IJavaPeerable) |
| DisposeUnlessReferenced() |
如果沒有未解決的參考資料,則 |
| Execute(IRunnable) |
在未來某個時間執行給定指令。 (繼承來源 IExecutor) |
| Finalized() |
當實例完成後才會被通知。 (繼承來源 IJavaPeerable) |
| InvokeAll(ICollection, Int64, TimeUnit) |
執行指定任務,並在所有任務完成或超時結束時(以先發生者為準)返回一份保存狀態與結果的未來清單。 |
| InvokeAll(ICollection) |
執行指定任務,完成後回傳一份包含狀態與結果的未來清單。 |
| InvokeAny(ICollection, Int64, TimeUnit) |
執行給定任務,並回傳成功完成的任務結果(i. |
| InvokeAny(ICollection) |
執行給定任務,並回傳成功完成的任務結果(i. |
| SetJniIdentityHashCode(Int32) |
將回傳的值設為 |
| SetJniManagedPeerState(JniManagedPeerStates) |
A |
| SetPeerReference(JniObjectReference) |
將回傳的值設為 |
| Shutdown() |
啟動有序關機,執行先前提交的任務,但不再接受新的任務。 |
| ShutdownNow() |
嘗試停止所有正在執行的任務,停止等待任務的處理,並回傳等待執行的任務清單。 |
| Submit(ICallable) |
提交一個值回傳任務以供執行,並回傳一個代表該任務待處理結果的未來。 |
| Submit(IRunnable, Object) |
提交一個可執行的任務,並回傳代表該任務的 Future。 |
| Submit(IRunnable) |
提交一個可執行的任務,並回傳代表該任務的 Future。 |
| UnregisterFromRuntime() |
取消註冊此實例,讓執行時不會在未來 Java.Interop.JniRuntime+JniValueManager.PeekValue 的呼叫中回傳該實例。 (繼承來源 IJavaPeerable) |
擴充方法
| 名稱 | Description |
|---|---|
| AwaitTerminationAsync(IExecutorService, Int64, TimeUnit) |
A |
| GetJniTypeName(IJavaPeerable) |
取得實例 |
| InvokeAnyAsync(IExecutorService, ICollection, Int64, TimeUnit) |
A |
| InvokeAnyAsync(IExecutorService, ICollection) |
A |
| JavaAs<TResult>(IJavaPeerable) |
試著強制 |
| JavaCast<TResult>(IJavaObject) |
執行 Android 執行時檢查型別轉換。 |
| JavaCast<TResult>(IJavaObject) |
A |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
試著強制 |