Java の並列コンピューティングは、タスクを複数の実行スレッドまたはプロセスに分散することによって実装され、アプリケーションを大幅に高速化できます。メイン API は java.util.concurrent パッケージです。これには、同時アクセスを最適化するためのスレッド、スレッド プール、同時実行クラスが含まれています。並列加算などの実際的なケースでは、タスクを分解してサブタスクを非同期に実行することでマルチコア プロセッサを最大限に活用し、コンピューティング効率を大幅に向上させます。
Java で並列コンピューティングを実装する方法
現代のコンピューティングでは、並列コンピューティングはマルチコア CPU を使用してアプリケーションを高速化するようになり、 GPUに必要なテクノロジー。 Java は、開発者が並列コンピューティングのメリットを簡単に享受できる豊富な API を提供します。
基本概念
並列コンピューティングでは、タスクを複数の実行スレッドまたはプロセスに割り当てます。このようにして、タスクを同時に実行できるため、全体の実行時間が短縮されます。 Java の主要な並列 API は、java.util.concurrent
パッケージです。
スレッド
スレッドは、アプリケーションのメモリ空間を共有する軽量の実行ユニットです。スレッドを作成して起動することで、タスクを並行して実行できます。
// 创建一个线程 Thread thread = new Thread(() -> { // 要执行的任务 }); // 启动线程 thread.start();
スレッド プール
スレッド プールはスレッドのコレクションを管理し、必要に応じてスレッドを自動的に作成および破棄します。これにより、パフォーマンスが向上し、リソース消費が削減されます。
// 创建一个线程池 ExecutorService executorService = Executors.newFixedThreadPool(4); // 提交任务到线程池 executorService.submit(() -> { // 要执行的任务 }); // 优雅地关闭线程池 executorService.shutdown();
同時実行クラス
Java には、ConcurrentHashMap
や BlockingQueue
などの同時実行クラスも用意されており、これらは並列用にすでに提供されています。アクセスが最適化されました。
// 创建一个并发 HashMap ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>(); // 插入数据到 HashMap map.put("key", 10); // 获取数据从 HashMap int value = map.get("key");
実用的なケース
次の並列合計のケースを考えてみましょう:
public class SumArrayParallel { public static void main(String[] args) { int[] numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // 使用 ForkJoinPool 分解任务 ForkJoinPool pool = ForkJoinPool.commonPool(); int sum = pool.invoke(new SumArrayTask(numbers, 0, numbers.length)); System.out.println("The sum of the array is: " + sum); } private static class SumArrayTask extends RecursiveTask<Integer> { private int[] numbers; private int start; private int end; public SumArrayTask(int[] numbers, int start, int end) { this.numbers = numbers; this.start = start; this.end = end; } @Override protected Integer compute() { int sum = 0; // 判断任务是否足够小,直接计算 if (end - start <= 3) { for (int i = start; i < end; i++) { sum += numbers[i]; } return sum; } // 如果任务太大,则分解它 int mid = (start + end) / 2; SumArrayTask leftTask = new SumArrayTask(numbers, start, mid); SumArrayTask rightTask = new SumArrayTask(numbers, mid, end); // 异步执行子任务 leftTask.fork(); rightTask.fork(); // 等待子任务完成并合并结果 return leftTask.join() + rightTask.join(); } } }
この場合、配列をより小さなチャンクに分割し、次を使用します。 ForkJoinPool
非同期並列合計の場合。このアプローチでは、マルチコア プロセッサを最大限に活用し、大規模な配列の合計プロセスが大幅に高速化されます。
以上がJava は並列コンピューティングをどのように実装しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。