ホームページ >Java >&#&チュートリアル >Java の Executor サービスの概要
Executor および ExecutorService API は、スレッドの実行を管理および制御するための重要なツールです。これらは java.util.concurrent パッケージの一部です。スレッドの作成、管理、同期の複雑さを抽象化することで、同時プログラミングのプロセスを簡素化します。
Executors は、java.util.concurrent パッケージのユーティリティ クラスで、さまざまな種類の ExecutorService インスタンスを作成および管理するためのファクトリ メソッドを提供します。これにより、スレッド プールの作成プロセスが簡素化され、さまざまな構成でエグゼキューター インスタンスを簡単に作成および管理できるようになります。
Executor API Java 1.5 以降で利用できるインターフェースです。 execute(実行可能なコマンド)メソッドを提供します。 これは基本インターフェイスであり、ExecutorService はこのインターフェイスを拡張します。指定されたコマンドは、将来、新しいスレッド、スレッド プールのスレッド、または同じスレッドによって実行され、void を返しません。
ExecutorService API Java 1.5 以降で利用できるインターフェースです。並行プログラミングでタスクの実行を制御するための複数の方法を提供します。実行可能なタスクと呼び出し可能なタスクの両方をサポートします。タスクのステータスとして Future を返します。以下に、最もよく使用される方法を示します。
submit() は、Callable タスクまたは Runnable タスクを受け入れ、Future 型の結果を返します。
invokeAny() は、実行するタスクのコレクションを受け取り、任意の 1 つのタスクが正常に実行された結果を返します。
invokeAll() は、実行するタスクのコレクションを受け取り、Future オブジェクト タイプのリストの形式ですべてのタスクの結果を返します。
shutdown() は、executor サービスをすぐに停止しませんが、新しいタスクを受け入れません。現在実行中のタスクがすべて終了すると、executor サービスがシャットダウンされます。
shutdownNow() は、Executor サービスを直ちに停止しようとしますが、実行中のすべてのタスクが同時に停止されることは保証されません。
awaitTermination(long timeout, TimeUnit単位) は、すべてのタスクが完了するか、タイムアウトが発生するか、現在のスレッドが中断されるか、いずれか先に起こるまでブロック/待機します。現在のスレッドはブロックされます。
ExecutorService の種類
ExecutorService fixedThreadPool = Executors.newScheduledThreadPool(5); Future<String> submit = fixedThreadPool.submit(() -> { System.out.println("Task executed by " + Thread.currentThread().getName()); return Thread.currentThread().getName(); }); fixedThreadPool.shutdown();
ExecutorService fixedThreadPool = Executors.newCachedThreadPool(); Future<String> submit = fixedThreadPool.submit(() -> { System.out.println("Task executed by " + Thread.currentThread().getName()); return Thread.currentThread().getName(); }); fixedThreadPool.shutdown();
ExecutorService fixedThreadPool = Executors.newSingleThreadExecutor(); Future<String> submit = fixedThreadPool.submit(() -> { System.out.println("Task executed by " + Thread.currentThread().getName()); return Thread.currentThread().getName(); }); fixedThreadPool.shutdown()
ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(); // Single-threaded scheduler ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(5); // Multi-threaded scheduler
scheduler.schedule(task, 10, TimeUnit.SECONDS); // Schedule task to run after 10 seconds. scheduler.scheduleAtFixedRate(task, 5, 10, TimeUnit.SECONDS); //It schedules a task to run every 10 seconds with an initial delay of 5 seconds. scheduler.scheduleWithFixedDelay(task, 5, 10, TimeUnit.SECONDS); //It schedules a task to run with a fixed delay of 10 seconds between the end of one execution and the start of the next, with an initial delay of 5 seconds. scheduler.schedule(() -> scheduler.shutdown(), 20, TimeUnit.SECONDS); //It schedules a shutdown of the scheduler after 20 seconds to stop the example.
ExecutorService へのタスクの送信
タスクは、execute() メソッドと submit() メソッドを使用して ExecutorService に送信できます。 execute() メソッドは実行可能なタスクに使用されますが、submit() は実行可能なタスクと呼び出し可能なタスクの両方を処理できます。
executor.execute(new RunnableTask()); //fire-and-forgot executor.submit(new CallableTask()); //returns the status of task
ExecutorService をシャットダウンしています
ExecutorService をシャットダウンしてリソースを解放することが重要です。これは、shutdown() メソッドと shutdownNow() メソッドを使用して実行できます。
executor.shutdown(); // Initiates an orderly shutdown" executor.shutdownNow(); // Attempts to stop all actively executing tasks. executor.awaitTermination(long timeout, TimeUnit unit); //blocks the thread until all tasks are completed or timeout occurs or current thread is interrupted, whichever happens first. Returns `true `is tasks completed, otherwise `false`.
シャットダウンへの推奨アプローチ
executor.shutdown(); try { // Wait for tasks to complete or timeout if (!executor.awaitTermination(120, TimeUnit.SECONDS)) { // If the timeout occurs, force shutdown executor.shutdownNow(); } } catch (InterruptedException ex) { executor.shutdownNow(); Thread.currentThread().interrupt(); }
Runnable について
Callable について
今後について
コーディングと学習を楽しんでください !!!
ご質問がございましたら、コメントしてください。
以上がJava の Executor サービスの概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。