Javaクラスライブラリでは、タスク実行の主な抽象化はThreadではなく、Executorです。
public interface Executor {
void execute(Runnable command);
}
これは、さまざまなタイプのタスク実行戦略をサポートできる、柔軟で強力な非同期タスク実行フレームワークの基盤を提供します。これは、タスク送信プロセスを実行プロセスから切り離し、Runnableを使用してタスクを表すための標準的な方法を提供します。Executorの実装は、ライフサイクルのサポートだけでなく、統計情報収集のメカニズム、アプリケーション管理メカニズム、およびパフォーマンス監視も提供します。
Executorフレームワークの2レベルのスケジューリングモデル
Javaの場合、Executorはマルチスレッドプログラムをいくつかのタスクに分解し、ユーザーレベルのスケジューラーを使用してこれらのタスクを固定数のスレッドにマップします。最下層の場合、オペレーティングシステムカーネルはこれらのスレッドをハードウェアプロセッサにマップします。
上の図からわかるように、アプリケーションプログラムはExecutorフレームワークを介して上位レベルのスケジューリングを制御し、下位レベルのスケジューリングはオペレーティングシステムカーネルによって制御され、下位レベルのスケジューリングはアプリケーション階層によって制御されません。 。
エグゼキュータフレームワークの構造
- タスク:実行可能なインターフェイス[返されたタスク]、呼び出し可能なインターフェイス[返されたタスク]
- タスクの実行: Executor、タスク実行メカニズムのコアインターフェイス、およびExecutorから継承されたExecutorServiceインターフェイスを含みます。
- 非同期計算の結果: FutureおよびFutureTask