Javaベース並行プログラミングキュータ、エグゼキュータ、ExecutorServiceの

エグゼキュータ

簡単な紹介

エグゼキュータ・フレームは、Java 5、java.util.cocurrentパケットのフレームによって制御スレッドを開始するスレッドプールを使用して、内部機構に導入され、クローズド実行、同時プログラム動作を簡略化することができます。このように、Java 5の後に、(コストを節約、実装スレッドプール)より管理し、より効率に加えて、エグゼキュータスレッド開始方法によってより良いスレッドを起動するには、

同様に重要な点として:これは脱出を防ぐことができます - 私たちはコンストラクタでスレッドを起動した場合、他のタスクは、コンストラクタの終了前に開始可能性があるため、この時間は、オブジェクトの初期化の半分にアクセスしてもよいですコンストラクタで使用さキュータ。タスク実行戦略の多くの異なる種類をサポートし、柔軟で強力な非同期実行フレームワーク、などEexecutor、プロデューサーに基づき、提出プロセスのタスクとデカップリングの開発プロセスを実行するための標準的な方法を提供 - 消費者モデル、提出タスクは、生産者スレッド、消費者と同等のタスクを実行するためのスレッドに相当し、かつ、エグゼキュータの実装はまた、ライフサイクルのサポートを提供したRunnableタスクで表され、統計情報収集、管理メカニズムとアプリケーションのパフォーマンス監視メカニズム。

エグゼキュータ:タスクを実行するために使用される受信方法エグゼキュータRunnableオブジェクト、メソッドシグネチャキュータ(Runnableをコマンド)を定義するインターフェース、方法はRunable例を受け取り、、、Runnableインタフェースを実装するクラスであるタスク、一般的に、新しいスレッドで使用するために開くためのRunnableタスクは:.新しいスレッド(新しいRunnableTask()))スタート()ですが、エグゼキュータに、エグゼキュータは、明示的にスレッドを作成することなく使用することができますてexecutor.execute(新RunnableTask());ソースは次のとおりです。

UMLクラス図エグゼキュータ

ExecutorServiceの

簡単な紹介

  • エグゼキュータは、ライフサイクル管理の方法を提供するサブクラスインターフェース、より普及している未来のオブジェクトを戻し、戻り方法の一つ以上の非同期タスクの将来を追跡することができ、ExecutorServiceのは(シャットダウンを呼び出すことができる)方法ExecutorServiceのは、メソッドが呼び出された後、スムーズに閉鎖された新しいタスクの受け入れを停止し、タスクの実行が完了するまでに提出されているのを待つExecutorServiceのにつながる(タスクが送信された2つのカテゴリに分類されます:1は、すでに進行中であり、他にもありますこれは、実行を開始しません)タスクが終了すると、提出されていることすべてがExecutorServiceのが閉じられます。だから我々は、一般的にマルチスレッドを実装し、管理するには、このインターフェイスを使用しています。
  • ExecutorService.submit()今後のメソッドにより、オブジェクトを返します、あなたは未来が完了したかどうかを照会するisDone()メソッドを呼び出すことができます。タスクが完了すると、それは結果を持って、あなたは結果を得るために、get()メソッドを呼び出すことができます。あなたはないisDone()のチェックは、直接、この場合には、結果が準備が整うまで、タスクの実行をキャンセルすることができますブロックしますget()は、()は結果をゲットを呼び出すことができます。将来は、キャンセル()メソッドが実行保留中のタスクをキャンセルするために使用されています。次のように(注除く)すべてのコードのコードExecutorServiceのです。

執行

簡単な紹介

エグゼキュータクラスは、スレッドプールのシリーズを作成するためのファクトリメソッドを提供し、スレッドプール戻りExecutorServiceのインタフェースを達成しています。

主に以下の6で作成しました:

newCachedThreadPool

  • キャッシュ型プール、最初のプールはありません以前に確立したスレッドをチェックし、そうであれば、再利用には、そうでない場合、プールに参加する新しいスレッドを構築
  • 典型的には、非同期タスクの生存のいくつかの種類を実行するために使用されるバッファー・プールは、コネクション型といくつかの型サーバのデーモンではるかにより非常に短く、したがってありません。しかし、短期生存非同期タスクのために、それはエグゼキュータの最初の選択肢です。
  • タイムアウトIDLE内である必要があり、スレッドプール内のスレッドを再利用することができ、デフォルトのタイムアウトは長い間、このIDLEを超えて、スレッドのインスタンスが終了し、プールから削除、60年代です。
  •   CachedThreadPoolにスレッドがその終わりを心配する必要があることに注意してください、TIMEOUT非アクティブよりも、それは自動的に終了します。

newFixedThreadPool

  • newFixedThreadPoolとcacheThreadPoolほぼ同様でそれを再利用することができますが、新しいスレッドを構築する準備ができていないこと
  • その独自性:唯一のキュー内の別の待機に、確立される新しいスレッドがある場合は、スレッドが直接現在のスレッドを終了するまでの時間の任意の時点で、この時だけ存在するアクティブなスレッドの固定数を持つことができますこれは、池から削除されました
  • そしてcacheThreadPool異なる、FixedThreadPoolなしIDLEメカニズム(持っているかもしれませんが、文書は言及しなかったことから、TCPやUDP IDLE機構等の上部に依存と同様に、非常に長くなければならない)、いくつかの非常に安定しており、非常に固定された定期的な同時実行スレッドに対してFixedThreadPool過半数ので、サーバーに使用
  • プール底と呼ばれるソース方法、キャッシュプールから見た固定プールは同じであるが、異なるパラメータ:
  • 固定スレッドの固定プールの数、およびIDLE 0秒(アイドル)、スレッドキャッシュ・プールのサポート0-Integer.MAX_VALUEの(どうやら完全にホストのリソース容量を考慮していない)の数で、60秒IDLE 

newScheduledThreadPool

  • スケジューリングタイプのスレッドプール
  • スレッドのこのプールは、ターン遅延スケジュール、またはサイクルの実行中に実行することができます

newWorkStealingPool

  • 仕事の盗難、競争を減らすために複数のキューを使用した(達成ForkJoinPool)

newSingleThreadExecutor

  • シングルトンスレッド、プール内の任意の時点で一つだけのスレッド
  • 固定のプールとプール付きのと同じ基本的なプールをキャッシュするが、スレッドの数はIDLE 1-1,0秒(アイドル)であります
  • 提出複数のタスク、また、キューで待機しているが、待機するように置かれる場合でも、タスクを実行するために単一のスレッドのみを使用

newSingleThreadScheduledExecutor

  • 遅延実行は、実行スレッドプールのタイミングシングルスレッドであることができます

VSキュータ   ExecutorServiceのVS  エグゼキュー区别

  • エグゼキュータとExecutorServiceの最初の差である:ExecutorServiceのインターフェースは、エグゼキュータインタフェースを拡張、サブインターフェースは、エグゼキュータであります
  • エグゼキュータと第2の相違点は、ExecutorServiceのである:エグゼキュータインターフェースを定義 execute()受信するためのメソッドをRunnableオブジェクトインタフェース、インタフェースExecutorServiceの submit()許容される方法RunnableおよびCallableオブジェクト・インタフェースを。
  • エグゼキュータと第三の違いはExecutorServiceのである:エグゼキュータは、 execute() この方法は結果を返しません、そしてExecutorServiceの submit()方法は、将来のオブジェクトの計算結果を返すことができます。
  • エグゼキュータと第四違いがExecutorServiceのです:クライアントがタスクを送信できるようにすることに加えて、ExecutorServiceのもスレッドプールを制御する方法を提供します。たとえば、次のように呼び出した shutDown() スレッドプールを終了させる方法を。
  • 執行クラスは、スレッドプールの異なるタイプを作成するファクトリメソッドを提供します。たとえば、次のようにnewSingleThreadExecutor()がスレッドプールスレッドの固定数を作成するための唯一のスレッドプール、(numOfThreads int型)newFixedThreadPoolスレッドを作成し、必要に応じて、newCachedThreadPoolは()新しいスレッドを作成することができますが、アイドル状態のスレッドがある場合は、再利用しますスレッドがあります。

ほとんど進展毎日!

おすすめ

転載: www.cnblogs.com/woxbwo/p/11462770.html