あなたは偉大な優雅さのJavaと神のキューを楽しみます

データ構造、より一般的なタイプとして、あなたがキュー(約十分に知っているキュー)ですか?今日から、私はキュー(についてご説明しますキューますよ興味が十分にあれば是非、ご参加、コンセプト、タイプ、および特定の使用を含め、すべて)、私はあなたと一緒に検討しますキュー謎。

 

コンセプト

キュー
キューは、特殊なリニア形、先入れ先出し(FIFO)データ構造です。削除操作のみテーブルの前端(フロント)、および挿入の後端、テーブル(後部)に許可されます。端の後端と呼ぶ、削除操作は、ヘッドの挿入操作と呼ぶことにします。何のキュー要素が存在しない場合は、空のキューと呼ばれます。電気の供給元スパイク:ので、FIFOキューの固有の特性のため、いくつかの特別な機会になど、好みと呼ばれます。プロセスとしてタスク注文要求のそれぞれは、処理待ちのキューにシーケンス11に配置されました。クラシック使用:スレッドプール。

待ち行列(キュー)内のJava
キューコレクションインターフェースサブインターフェースの両方に、同じレベルのためにリスト、セットインタフェース。また、コレクションインタフェースの基本的な操作に加えて、しかし、キュー挿入、抽出及び検査業務を提供しています。これらの方法の各々は、二つの形態がある:一つは例外(オペレーションが失敗した場合)、さらにリターン(操作に応じヌルまたは偽)特殊な値をスロー。インサートの後者の形態は、容量制限キューの実装の設計のために設計され、ほとんどの実装では、挿入は失敗しないであろう。

 

 

 

 

メソッドの比較

分類

:キューは一般に2つのタイプに分け
1>ノンブロッキングキュー:インターフェイスのキューはBlockingQueueのを実装していません:
共通です:
ConcurrentLinkedQueue:キューベースのスレッドセーフ無制限リストノード。このキュー受注要素FIFO(先入れ先出し)の原則。キューの先頭には、キュー最長の要素です。キューの末尾には、最短キュー要素です。新しい要素はキューの末尾に挿入され、キュー検索操作は、キュー要素の頭部から得られます。複数のスレッドがパブリックコレクションへのアクセスを共有する場合、ConcurrentLinkedQueueは適切な選択です。

LinkedListの:、リストの一番下を維持オプションリスト操作のすべてを達成するために、及び(NULLを含む)すべての要素を可能にします。Listインタフェースを実装するほかに、LinkedListクラスは、リストの先頭のために、エンドGET、削除、挿入要素で均一な命名規則を提供します。スタック、キュー両端キューなどを実装するために使用することができます。

優先度つきキュー:優先度ヒープに基づく、無制限の優先度キュー。キューその自然順序に従って優先順位要素、またはコンパレータに従ってソートを用いる構成方法に応じて、キュー構造に設けられました。

2>キューブロッキング:BlockingQueueのインターフェイスキューを実装する
一般的である:
ArrayBlockingQueue:有界ブロッキングキューの配列によって裏付け。このキューFIFO(先入れ先出し)原則ソート要素。キューの先頭には、キュー要素の中で最長の存在です。キューのテール要素がキューに存在する最短時間です。新しい要素はキューの末尾に挿入され、キュー検索操作は、キュー要素の先頭から取得されます。キャッシュが正常に作成されたときに、配列は、その後、固定長の基礎となるキャッシュを囲まれ、キュー内の要素を入れしようとしていることはいっぱいあり、必然的に閉塞につながるので。また、これらはパラメータがtrueに設定されている場合、最長待ちスレッドが優先順位の治療を取得する株式、公正の原則をサポートしています。公正は、一般的にスループットが減少するだけでなく、ばらつきを低減し、回避「アンバランスを。」

LinkedBlockingQueue:キューに基づいて、一般キューリストの、(デフォルトにInteger.MAX_VALUEで、キューサイズの容量を提供し、指定された制限の方法を使用して)アンバウンドのブロッキングキューを実装し、基礎となるリストを使用して、特定の配列よりも高いですしかし、ほとんどの同時実行アプリケーションでは、その予測可能なパフォーマンスが低くなります。

DelayQueue:その遅延時間が経過したときに、無制限のブロッキングキュー、およびその他のさまざまなキューは、データを取得するためにキューは唯一の要素から抽出することができます。最長遅延型記憶素子の遅延時間の経過後にキューの先頭。遅延時間が経過していない場合は、何のキューヘッドと投票がnullを返しません。要素getDelay(TimeUnit.NANOSECONDS)メソッドは以下の値を返すか、0に等しい場合、有効期限が発生します。テイクまたは削除要素有効期限内の投票を使用していない場合は、これらの要素は、通常の要素として扱われることはありません。

PriorityBlockingQueueは:むしろ、FIFOキューよりも、とプライオリティキューです。要素は、優先度の順に削除され、ソースを見たキュー(の上限はない、再びPriorityBlockingQueueは、優先度つきキュー包装基づくヒープデータ構造で一度であるが、いかなる容量の制約が優先ので、同様に優先度つきキュー、およびArrayListの存在しませんブロックキューに入れたときに、このキューは、論理的に無制限である間。ブロックされていないが、資源が枯渇しているので、そうしようとするとOutOfMemoryErrorが発生)を動作させるにつながるかもしれないが、キューが空で、オペレータのテイクテイク要素である場合その検索操作がブロックされて取るので、それは、ブロックされます。また、キューの要素に比較する能力を持っています。

SynchronousQueue:Aブロッキングキュー、各挿入操作が別のスレッドに対応する除去操作を待って、そしてその逆もしなければならないことを特徴とします。同期キューは、任意の内部容量、すべての能力のないも、キューを持っていません。、また反復キュー;のみ存在すること要素を削除しようとする場合にのみので、同期キューPEEKで行うことができない、別のスレッドが要素を削除しようとしない限り、またはできない(任意の方法)要素を挿入反復のために使用することができる要素がないので。キューの先頭には、最初のキューに入れられた糸挿入要素を追加しようとするキューであり、そのようなキューに入れられたスレッド場合、どの要素のリムーバブルはありませんし、nullを返します()ポーリングに使用することができます。コレクション他の方法(例えば、含まれている)、空のコレクションとしてSynchronousQueue。このキューがnull要素を許可しません。

それを言って、それだけで説明するキュー私たちは勉強する必要がある多くの非常に深遠なコンテンツがあるキューの種類を。興味のある方は、ご参加、私はマスターにあなたを参加しますキューで使用するJavaの遠く遠く道。

おすすめ

転載: www.cnblogs.com/chenmo2580/p/11959225.html