Java 7 でスレッド プールを使用してタスクの周期実行と返される結果の処理を実装する方法
Java では、スレッド プールは重要なマルチスレッド プログラミング テクノロジであり、スレッド作成のオーバーヘッドを削減できます。より高いケースでは、スレッドの再利用と管理が提供されます。スレッド プールを介して、複数のタスクをスレッド プールに送信して実行できます。スレッド プールは、バックグラウンドでスレッドのグループを維持し、特定のポリシーに従ってこれらのスレッドの実行をスケジュールおよび管理します。 Java 7 では、スレッド プールの使用がより簡単かつ便利になりました。この記事では、Java 7 のスレッド プールを使用してタスクの周期実行と結果の戻り処理を実装する方法を紹介します。
1. スレッド プールの作成
Java 7 では、ThreadPoolExecutor クラスを使用してスレッド プールを作成できます。 ThreadPoolExecutor は、コア スレッドの数、スレッドの最大数、タスク キュー、拒否ポリシー、およびスレッド プールのその他のパラメーターをカスタマイズするためのさまざまな構築方法を提供します。以下は、スレッド プールを作成するための簡単なコード例です:
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class ThreadPoolExample { public static void main(String[] args) { // 创建一个固定大小为5的线程池 ExecutorService executorService = Executors.newFixedThreadPool(5); // ... // 关闭线程池 executorService.shutdown(); } }
2. タスクを送信して戻り結果を取得します
スレッド プールを作成した後、タスクをスレッド プールに送信できます。 submit() メソッド タスク内で実行し、Future オブジェクトを通じてタスクの戻り結果を取得します。以下はサンプル コードです:
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; public class ThreadPoolExample { public static void main(String[] args) { ExecutorService executorService = Executors.newFixedThreadPool(5); // 提交任务并获取Future对象 Future<String> future = executorService.submit(() -> { // 任务的具体逻辑 // 这里以延时1秒返回结果为例 try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } return "Hello, World!"; }); try { // 获取任务的返回结果 String result = future.get(); System.out.println(result); } catch (Exception e) { e.printStackTrace(); } executorService.shutdown(); } }
3. タスクのループ実行
一部のシナリオでは、一連のタスクをループして各タスクの戻り結果を取得する必要がある場合があります。 for ループを使用してタスクを送信し、List を使用して各タスクの Future オブジェクトを保存できます。以下にサンプルコードを示します。
import java.util.ArrayList; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; public class ThreadPoolExample { public static void main(String[] args) { ExecutorService executorService = Executors.newFixedThreadPool(5); // 保存每个任务的Future对象 List<Future<String>> futures = new ArrayList<>(); // 循环执行10个任务 for (int i = 0; i < 10; i++) { final int taskId = i; Future<String> future = executorService.submit(() -> { // 任务的具体逻辑 // 这里以延时1秒返回结果为例 try { Thread.sleep(1000); } catch (Exception e) { e.printStackTrace(); } return "Task-" + taskId + " is completed."; }); futures.add(future); } // 获取每个任务的返回结果 for (Future<String> future : futures) { try { String result = future.get(); System.out.println(result); } catch (Exception e) { e.printStackTrace(); } } executorService.shutdown(); } }
4. まとめ
スレッドプールを利用することで、Java 7 でタスクの周期実行と返却結果処理を実現できます。スレッド プールを作成するときは、特定のニーズに応じてスレッド プールのパラメータを調整できます。タスクを送信するときは、submit() メソッドを通じてタスクを送信し、Future オブジェクトを使用してタスクの戻り結果を取得できます。 ; タスクをループで実行する必要がある場合は、for ループを使用してタスクを送信し、List を使用して各タスクの Future オブジェクトを保存できます。スレッドプールを合理的に利用することで、システムリソースを最大限に活用し、プログラムの実行効率を向上させることができます。
以上がJava 7 でスレッド プールを使用してタスク ループの実行と結果を返す処理を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。