執行者

Executor は、 Runnableタスクの起動を実装するクラスの基本インターフェイスです。これにより、タスクの追加とその開始方法が支援されます。

ExecutorServiceは、 Executor のプロパティを拡張し、 RunnableまたはCallableタスクを実行するためのサービスを記述する。submit メソッドは、入力としてCallableまたはRunnableの形式でタスクを受け取り、Future が戻り値として使用され、それを通じて結果を取得できます。

invokeAllメソッドはタスクを実行し、ステータスと完了結果を含むタスクのリストを返します。

invokeAnyメソッドはタスクを実行し、正常に完了したタスクの結果があれば (つまり、例外をスローせずに) 返します。

ScheduledExecutorService - このインターフェイスは、保留中のタスクを特定の遅延または特定の期間で実行する機能を追加します。

AbstractExecutorServiceは、 ExecutorService を構築するための抽象クラスです。内部には、 submit invokeAll invokeAnyメソッドの実装があります。このクラスはThreadPoolExecutor ScheduledThreadPoolExecutor、およびForkJoinPoolを継承します。

public static void main(String[] args) {
   ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);
   Callable<String> task = () -> {
       System.out.println(Thread.currentThread().getName());
       return Thread.currentThread().getName();
   };
   scheduledExecutorService.schedule(task, 10, TimeUnit.SECONDS);
   scheduledExecutorService.shutdown();
}

スレッドプールエグゼキュータ

Executors は、ThreadPoolExecutor ScheduledThreadPoolExecutorを作成するためのファクトリ クラスです。これらのプールのいずれかを作成する必要がある場合、このファクトリーがまさに必要なものです。これには、Runnable-Callable、PrivilegedAction-Callable、PrivilegedExceptionAction-Callable などのさまざまなアダプターが含まれています。さまざまなThreadPool を作成するための静的メソッドがあります。

ThreadPoolExecutor - ExecutorインターフェイスとExecutorServiceインターフェイスを実装し 、タスクの作成とタスクの実行を分離します。Runnableオブジェクトを実装してエグゼキューターに送信する必要があります。ThreadPoolExecutorその実行、インスタンス化、スレッドの操作を担当します。

ScheduledThreadPoolExecutor - ThreadPoolExecutorメソッドに加えて、指定された遅延の後に実行するコマンド、または定期的に実行するコマンドをスケジュールできるスレッドのプールを作成します。

スレッドファクトリーオンデマンドで新しいスレッドを作成するオブジェクトです。インスタンスをExecutors.newSingleThreadExecutor(ThreadFactory threadFactory)メソッドに渡す必要があります。

ExecutorService executorService = Executors.newSingleThreadExecutor(new ThreadFactory() {
 @Override public Thread newThread(Runnable r) {
Thread thread = new Thread(r, "MyThread");
thread.setPriority(Thread.MAX_PRIORITY);
 return thread; }
 });

RejectedExecutionHandler - 何らかの理由でThreadPoolExecutorを通じて実行できないタスクのハンドラーを定義できます。これは、無料のストリームがない場合、またはサービスがシャットダウンまたはシャットダウンされている場合に発生します。

ThreadPoolExecutorクラスには、いくつかの標準実装があります。

  • CallerRunsPolicy - 呼び出しスレッドでタスクを実行します。
  • AbortPolicy - 例外をスローします。
  • DiscardPolicy - タスクを無視します。
  • DiscardOldestPolicy - キューから最も古い未開始タスクを削除し、新しいタスクを再度追加しようとします。

コンプリートサービス

CompletionService は、非同期タスクの起動と結果の取得を分離したサービス インターフェイスです。タスクを追加するにはsubmitメソッド、すでに完了したタスクの結果を取得するには、ブロッキングtakeとノンブロッキングpoll

ExecutorCompletionService は、 ThreadPoolExecutorForkJoinPoolなどのExecutorインターフェイスを実装するクラスのラッパーです。タスクの起動とその実行の制御方法を抽象化する必要がある場合に使用されます。

完了したタスクがある場合は、それらを引き出します。タスクがない場合は、何かが完了するまで待機します。このサービスはそのコアで LinkedBlockingQueue を使用しますが、任意の BlockingQueue 実装を渡すことができます。