What is Executor framework in java?

エグゼキュータFrameworkはJavaで導入されています 1.5 そしてそれは、java.util.concurrentパッケージの一部であります. エグゼキュータのフレームワークは、Javaのマルチスレッドの実際の実装の上に抽象化したものです. これは、呼び出しを標準化するために使用されます, スケジューリング, コンストラクタの作成時に定義された実行ポリシーのセットに従って非同期タスクの実行と制御.

javaの前に 1.5, マルチスレッドアプリケーションは、スレッドグループを使用して作成されました , スレッドプールまたはカスタム・スレッド・プール. 今、各スレッドの制御は、心の中で、以下の点を維持するプログラマによって行われなければなりません
●同期
●ロック
●お知らせ
●デッドロック
アプリケーション要件から生じると、より多くの. いくつかの時間は、スレッドの動作は、アプリケーションが展開される環境や走行に依存しているため、マルチスレッドアプリケーションを制御することは非常に困難です. 例えば、プロセッサ速度, RAMサイズ, すべての帯域幅は、マルチスレッドのアプリケーションに直接影響します. だから、アーキテクチャを作成する前に、念頭に置いて、これらすべての要因を維持する必要があります.
エグゼキュータのフレームワークは、タスクを考えるための簡単​​な抽象化とマルチスレッド・アプリケーション・プログラムを提供します. 代わりに、スレッドの観点で考えるの, アプリケーションは今のRunnableのインスタンスと単純に扱います (基本的なタスクの集合であります). そして処理するエグゼキュータに渡されます. ExecutorServiceのインタフェースは、単純なエグゼキュータ・インターフェースを拡張し、エグゼキュータのフレームワークを管理するためのライフサイクルメソッドがあります.
エグゼキュータのフレームワークは、Runnableをまたはコーラブルのインスタンスを使用してタスクを表し、. Runnableのrun () メソッドは値を返すか、チェック例外をスローしません. 呼び出し可能な、その領域内の複数の機能性バージョンです. これは、コールを定義します () 将来の処理に使用することができるいくつかの演算値の復帰を可能にする方法. そしてそれはまた、必要に応じて例外をスローします.
FutureTaskクラスは、処理に関する今後の情報を取得するために使用されます. このクラスのインスタンスは呼び出し可能またはRunnableのいずれかをラップすることができます. あなたが提出するの戻り値としてこののインスタンスを取得することができます () ExecutorServiceの方法. また、手動で実行する呼び出す前に、FutureTaskであなたのタスクをラップすることができます () 方法.
以下は、ThreadPoolExecutorを実装する機能の手順です.
●単一/複数のスレッドのプールが作成されます.
●キューは、すべてのタスクを保持して作成されますが、これらのタスクはまだプールからスレッドに割り当てられていません. バウンド形式とアンバウンド形式のキューが用意されています.
1つ以上のタスクがキューに割り当てることができないとき●拒否ハンドラは、状況を処理するために使用されます. デフォルトの拒否ポリシーに従って、, それは単にRejectedExecutionException実行時例外がスローされます, アプリケーションは、それをキャッチしたり、それを破棄することができます.

次のエグゼキュータのフレームワークのライフサイクルを観察する例です。. ここでは、唯一の基本手順と基本的なインタフェースを説明します. 申請者ニーズの異なる種類を処理するために利用できるより多くのプロパティとサブクラスがあります。.

以下のクラスはRunnableを実装し、そのインスタンスは、コードの次のセクションでタスクとして使用されます.

public class jobPrint implements Runnable {
private final String name;
private final int delay;
public jobPrint(String name, int delay) {
this.name = name;
this.delay = delay;
}
public void run() {
System.out.println("Starting: " + name);
try {
Thread.sleep(delay);
} catch (InterruptedException ignored) {
}
System.out.println("Done with: " + name);
}
}

以下のクラスは、エグゼキュータのタスクを実施しています.

import java.util.concurrent.*;
import java.util.Random;

パブリッククラスUseExecutorService {
公共の静的な無効メイン(String args[]) {
ランダムランダム=新しいランダム();
ExecutorServiceのエグゼキュータ= Executors.newFixedThreadPool(3);
// シャットダウン時に知っておく待機時間をまとめます
int型WAITTIME = 500;
のために (I = 0 int型; 私<10; 私 ) {
文字列名= “NamePrinter ” + 私;
int型の時間= random.nextInt(1000);
WAITTIME =時間;
Runnableをランナー=新しいjobPrint(名前, 時間);
System.out.printlnは(“追加: ” + 名前 + ” / ” + 時間);
executor.execute(ランナー);
}
試す {
のThread.sleep(WAITTIME);
executor.shutdown();
executor.awaitTermination
(WAITTIME, TimeUnit.MILLISECONDS);
} キャッチ (InterruptedExceptionある無視) {
}
でSystem.exit(0);
}
}

executorを作成します。

まず執行またはExecutorServiceのインスタンスを作成します. エグゼキュータクラスは、ExecutorServiceのを作成するためのstaticファクトリメソッドの数を持っています. For example, newFixedThreadPool() 初期化とアンバウンド形式のキューとスレッド数の決まったThreadPoolExecutorインスタンスを返します。. そして、newCachedThreadPool () アンバウンド形式のキューとスレッドの数は無制限で初期化ThreadPoolExecutorインスタンスを返します。. 第二の場合には, available.Ifなし無料でスレッドが使用可能な場合、既存のスレッドが再利用されます, 新しいものが作成され、プールに追加され、. タイムアウト期間よりも長くアイドル状態になっているスレッドはプールから自動的に削除されます.
これは、一定のプールであります 15 スレッド.
プライベート静的最終エグゼキュータ= Executors.newFixedThreadPool(15);
これは、キャッシュされたスレッドプールです
プライベート静的ExecutorServiceの幹部= Executors.newCachedThreadPool();
カスタマイズされたスレッドプールエグゼキュータは、次のとおり. パラメータ値は、アプリケーションの必要性に依存します. ここで、コアプールが持つされます 5 そのスレッドが同時に実行することができ、最大数です 10. キューは、保持することが可能です 200 tasks. ここでは一点は、プールのサイズは、すべてのタスクに対応するために、より高い側に維持されるべきであることを忘れてはなりません. アイドル時間の制限は次のように保たれています 5 ミズ.
プライベート静的最終エグゼキュータ=て、新しいThreadPoolExecutor(5, 10, 50000L, TimeUnit.MILLISECONDS, 新しいLinkedBlockingQueue(200));

1つまたは複数のタスクを作成し、キューに入れ

Runnableを又は呼び出し可能ないずれかのインスタンスとして実行される1つまたは複数のタスクを作成します.

エグゼキュータにタスクを送信

ExecutorServiceのを作成した後, あなたが提出いずれかを使用することによって、それにタスクを提出する必要があります () または実行 () 方法. 今すぐプールからスレッドがキューから自動的にタスクを取ると、それを実行します. すべてのタスクがキューから終了するまで、今、プロセスが続行されます.

タスクを実行します

今、エグゼキュータは、タスクの実行を管理する責任があります, スレッドプールとキュー. プールは最小のスレッドのその構成された数よりも少ないを持っている場合, その制限が設定された値に到達するまで、新しいスレッドがキューに入れられたタスクを処理するために作成されます. 数が設定され、最小値よりも高い場合, その後、プールには、任意のより多くのスレッドを起動しません. 代わりに, スレッドが要求を処理するために解放されるまで、タスクがキューイングされています. キューがいっぱいの場合, その後、新しいスレッドは、それを処理するために開始されます.

シャットダウンエグゼキュータ

終端は、そのシャットダウンを呼び出すことによって実行されます。 () 方法. あなたはそれを正常に終了することを選択できます, または突然.

One thought on “What is Executor framework in java?

============================================= ============================================== Amazonで最高のTechAlpine Booksを購入してください,en,電気技師CT栗,en
============================================== ---------------------------------------------------------------- electrician ct chestnutelectric
error

Enjoy this blog? Please spread the word :)

Follow by Email
LinkedIn
LinkedIn
Share