キューキュー:主に高同時実行が存在し、そこにキャリーがあります。
しゃれのDequeキュー:頭と尾はアクセスすることができます
:キューのブロッキングのBlockingQueueを
優先度つきキュー優先キュー:FIFO注文
DelayQueueの遅延キューを:のみキューオブジェクトの満了後に削除されるために、
ハッシュテーブル、ベクトル
同期発生容器、すべてのメソッドがロックされ、基本的な必要性
ハッシュテーブル、HashMapの、SynchroizedHashMap、ConcurrentHashMapの
ハッシュテーブル:JDK1.0の時代、すべてのメソッドがロックされた、貧弱なパフォーマンス
のHashMap:高効率が、ロックなし
SynchronizedHashMap:提供ロックフリー、コレクションツールの問題を解決するためのHashMap変換方法。ハッシュテーブルは、メソッドに直接ロックされ、効率がロックオブジェクトだけ高いです。
Collections.synchronizedMap(new HashMap<>);
ConcurrentHashMapの:同時表
書き込み効率で、それは主に小型の同時実行、マップの同期型は必ずしもConcurrentHashMapのよりも低下しない場合は、同時実行スレッドの数によって異なります。(シンクロックのアップグレード)。使用ConcurrentHashMapの高い同時実行。
読ん効率で、ConcurrentHashMapのハッシュテーブルの効率とSyncTableよりも回数
ArrayListに、ベクトル、キュー
ArrayListのスレッドセーフな、複数のスレッドを生成売られ過ぎアクセスする
ベクタスレッドセーフを、すべての方法がロックされた
マルチスレッドの条件でConcurrentLinkedQueueを、どのスレッドが存在しない場合は、キューを使用しようと繰り返すことはできません。キューの提供は、マルチスレッドに優しいAPI [プラン()PEEK()たくさんの投票()]
BlockingQueueのための[PUTは、()(取ります) ]
Queue q = new ConcurrentLinkedQueue<>();
q.add();
q.poll();
ConcurrentHashMap、ConcurrentSkipListMapの
非スレッド同期:ハッシュマップ、ツリーマップ(赤黒木ソート、クエリの速度)
スレッド同期:(ジャンプテーブル、実装するためにCASツリー複雑すぎる、ジャンプテーブルは、RedisのZSET下で実装されている)のConcurrentHashMap、ConcurrentSkipListMapの
ジャンプテーブル構造、底がまだありますリスト(ソート)、選出された親要素がより選挙あれば、まだ再び、リスト構造(パラレルチェーン)リンクされている親です。クエリ、最終的には、ノードの親ノードと、の間の範囲。
はるかに高速リンクリストの効率より(O(N)、O( LOGN))
CopyOnWriteArrayListと、CopyOnWriteArraySet
アプリケーション:マルチスレッド、マルチ読み書き操作は以下の動作条件。交換後の新しい要素のArrays.copyOf新しいアレイによる同期の書き込み、。ロックされていない(新しい要素を除いて、他の要素はまったく同じロックする必要はありません)読んで
、最終的な位置に新しい要素、コピー配列要素を追加する際に、コピー・オン・ライトをし、新しいアドレスを指します。
BlockingQueueの
無制限(ないよりはInteger.MAX_VALUE以上)LinkedBlockingQueue
有界とArrayBlockingQueue
DelayQueueは、時間に注文した
二つのスレッド間Synchronousqueue転送タスク
TransferqueueよりセットQ
キュー一般的に使用される方法:
提供()追加された要素、成功を返すかの追加要素戻り値
PEEK()要素を削除し、要素は削除されません
(投票を)の要素を削除し、要素を削除
(消費者の生産を達成生まれ)BlockingQueueの一般的な方法:
要素に入れ()、フル待つ場合
、そのような要素ではないことが望ましいような()を取り外し要素をとり、ブロックします
ArrayBlockingQueue
コンストラクタメソッドのサイズを決定してもよいした後に、閾値に達した:
PUT方法が、実行される要素が追加されず、ブロックされた、
Addメソッドが実行され、例外、キューフルがスローされ、
オファー実行方法は、偽要素リターンを追加しない、コンストラクタの値を追加しようとする時に渡すことができます
DelayQueue
タスクは、時間、タイミングタスクスケジューリングに基づいて実行することができます
優先度つきキュー
挿入順序を削除せずに、優先して第1の最小値を命じました
SynchronusQueue
容量は効果が要素をロードするために使用されていない、ゼロであるが、他のタスクに割り当てられたスレッド。
容量が0であるため、使用の追加()異常、要素を追加することができません。使用する要素のみを削除)(テイクを待って、ブロック操作を行う)(置きます
TransferQueue
LinkedTransferQueueの
転送(「テスト」);元素を添加した後、閉塞、除去要素を待ちます。
シーン:消費者が取り除かれた要素を決定しなければなりません。