Java 並列プログラミングでの ExecutorService と FutureTask の使用
ExecutorService を使用してスレッド プールを管理し、タスクを実行し、FutureTask を使用してタスクを非同期に実行し、その結果を取得します。 ExecutorService は、execute() や submit() などのメソッドを提供し、FutureTask は get()、isDone()、および cancel() メソッドを提供します。実際の例では、これらを使用してフィボナッチ数列の数値を並列計算する方法を示します。
Java 並列プログラミングにおける ExecutorService と FutureTask の使用
はじめに
ExecutorService と FutureTask は、Java での並列プログラミングに便利なツールです。 ExecutorService を使用すると一連のスレッドを管理でき、FutureTask を使用するとタスクを非同期に実行し、その結果を取得できます。
ExecutorService
ExecutorService は、実行可能なスレッド タスクのコレクションを表すインターフェイスです。以下を使用して ExecutorService のさまざまな実装を作成できます。
ExecutorService executorService = Executors.newFixedThreadPool(5);
ここで、5 はスレッド プール内のスレッドの数を表します。
ExecutorService は、タスクを実行するための次のメソッドを提供します。
execute(Runnable task)
: 実行可能なタスクを実行します。submit(実行可能タスク)
: 実行可能タスクを実行し、値を返します。submit(Callable<T> task)
: Callable タスクを実行し、値を返します。
FutureTask
FutureTask は、タスクを非同期に実行し、後でその結果を取得できるようにする呼び出し可能タスクのラッパーです。次のメソッドを使用して FutureTask を作成できます:
FutureTask<String> futureTask = new FutureTask<>(() -> "Hello, world!");
ここで () -> "Hello, world!"
は実行される呼び出し可能タスクです。
FutureTask には、タスクの結果を取得するための次のメソッドが用意されています。
get()
: タスクの完了を待機するブロックと結果を返します。isDone()
: タスクが完了したかどうかを確認します。cancel(boolean MayInterruptIfRunning)
: タスクをキャンセルします (可能な場合)。
実践例
フィボナッチ数列を計算するプログラムを考えてみましょう。 ExecutorService と FutureTask を使用して、複数のフィボナッチ数を並行して計算できます。
import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.FutureTask; class FibonacciTask implements Callable<Long> { private int n; public FibonacciTask(int n) { this.n = n; } @Override public Long call() { long a = 0; long b = 1; for (int i = 0; i < n; i++) { long temp = a; a = b; b = temp + b; } return a; } } public class Main { public static void main(String[] args) { ExecutorService executorService = Executors.newFixedThreadPool(4); FutureTask<Long>[] tasks = new FutureTask[10]; // 创建并提交任务 for (int i = 0; i < 10; i++) { tasks[i] = new FutureTask<>(new FibonacciTask(i)); executorService.submit(tasks[i]); } // 获取并打印结果 for (int i = 0; i < 10; i++) { try { System.out.println("斐波那契数列第 " + i + " 项:" + tasks[i].get()); } catch (Exception e) { e.printStackTrace(); } } // 关闭 ExecutorService executorService.shutdown(); } }
この例では、ExecutorService を作成し、10 個の FibonacciTask タスクを送信しました。各タスクはフィボナッチ数列の数値を計算します。 FutureTask を使用すると、これらのタスクを非同期で実行し、後で結果を取得できます。
以上がJava 並列プログラミングでの ExecutorService と FutureTask の使用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

この記事では、Lambda式、Streams API、メソッド参照、およびオプションを使用して、機能プログラミングをJavaに統合することを調べます。 それは、簡潔さと不変性を通じてコードの読みやすさと保守性の改善などの利点を強調しています

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

この記事では、単一のスレッドで複数の接続を効率的に処理するためにセレクターとチャネルを使用して、非ブロッキングI/O用のJavaのNIO APIについて説明します。 プロセス、利点(スケーラビリティ、パフォーマンス)、および潜在的な落とし穴(複雑さ、

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

この記事では、ネットワーク通信のためのJavaのソケットAPI、クライアントサーバーのセットアップ、データ処理、リソース管理、エラー処理、セキュリティなどの重要な考慮事項をカバーしています。 また、パフォーマンスの最適化手法も調査します
