語言

IExecutorService 介面

定義

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

如果該執行人已被關閉,則會退貨 true 。

IsTerminated

關閉後所有任務都完成後,會回傳 true 。

JniIdentityHashCode

回傳包裹實例的 java.lang.System.identityHashCode() 值。

(繼承來源 IJavaPeerable)
JniManagedPeerState

管理貴族的狀況。

(繼承來源 IJavaPeerable)
JniObjectReferenceControlBlock

A Executor 提供管理終止的方法,以及能產生 Future 追蹤一個或多個非同步任務進度的方法。

(繼承來源 IJavaPeerable)
JniPeerMembers

成員存取與召喚支援。

(繼承來源 IJavaPeerable)
PeerReference

回傳JniObjectReference包裹後的 Java 物件實例。

(繼承來源 IJavaPeerable)

方法

名稱 Description
AwaitTermination(Int64, TimeUnit)

在關閉請求後所有任務完成執行、逾時發生或當前執行緒中斷(以先發生者為準)為止。

Close()

啟動有序關機,執行先前提交的任務,但不再接受新的任務。

Disposed()

當實例被處理後才被召喚。

(繼承來源 IJavaPeerable)
DisposeUnlessReferenced()

如果沒有未解決的參考資料,則 Dispose()呼叫;否則,則不做任何事。

(繼承來源 IJavaPeerable)
Execute(IRunnable)

在未來某個時間執行給定指令。

(繼承來源 IExecutor)
Finalized()

當實例完成後才會被通知。

(繼承來源 IJavaPeerable)
InvokeAll(ICollection, Int64, TimeUnit)

執行指定任務,並在所有任務完成或超時結束時(以先發生者為準)返回一份保存狀態與結果的未來清單。

InvokeAll(ICollection)

執行指定任務,完成後回傳一份包含狀態與結果的未來清單。

InvokeAny(ICollection, Int64, TimeUnit)

執行給定任務,並回傳成功完成的任務結果(i.

InvokeAny(ICollection)

執行給定任務,並回傳成功完成的任務結果(i.

SetJniIdentityHashCode(Int32)

將回傳的值設為 JniIdentityHashCode。

(繼承來源 IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

A Executor 提供管理終止的方法,以及能產生 Future 追蹤一個或多個非同步任務進度的方法。

(繼承來源 IJavaPeerable)
SetPeerReference(JniObjectReference)

將回傳的值設為 PeerReference。

(繼承來源 IJavaPeerable)
Shutdown()

啟動有序關機,執行先前提交的任務,但不再接受新的任務。

ShutdownNow()

嘗試停止所有正在執行的任務,停止等待任務的處理,並回傳等待執行的任務清單。

Submit(ICallable)

提交一個值回傳任務以供執行,並回傳一個代表該任務待處理結果的未來。

Submit(IRunnable, Object)

提交一個可執行的任務,並回傳代表該任務的 Future。

Submit(IRunnable)

提交一個可執行的任務,並回傳代表該任務的 Future。

UnregisterFromRuntime()

取消註冊此實例,讓執行時不會在未來 Java.Interop.JniRuntime+JniValueManager.PeekValue 的呼叫中回傳該實例。

(繼承來源 IJavaPeerable)

擴充方法

名稱 Description
AwaitTerminationAsync(IExecutorService, Int64, TimeUnit)

A Executor 提供管理終止的方法,以及能產生 Future 追蹤一個或多個非同步任務進度的方法。

GetJniTypeName(IJavaPeerable)

取得實例 self類型的 JNI 名稱。

InvokeAnyAsync(IExecutorService, ICollection, Int64, TimeUnit)

A Executor 提供管理終止的方法,以及能產生 Future 追蹤一個或多個非同步任務進度的方法。

InvokeAnyAsync(IExecutorService, ICollection)

A Executor 提供管理終止的方法,以及能產生 Future 追蹤一個或多個非同步任務進度的方法。

JavaAs<TResult>(IJavaPeerable)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

JavaCast<TResult>(IJavaObject)

執行 Android 執行時檢查型別轉換。

JavaCast<TResult>(IJavaObject)

A Executor 提供管理終止的方法,以及能產生 Future 追蹤一個或多個非同步任務進度的方法。

TryJavaCast<TResult>(IJavaPeerable, TResult)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

適用於