マルチスレッドと並行性の高い、7-コンテナ

ここに画像を挿入説明
キューキュー:主に高同時実行が存在し、そこにキャリーがあります。
しゃれの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の
転送(「テスト」);元素を添加した後、閉塞、除去要素を待ちます。
シーン:消費者が取り除かれた要素を決定しなければなりません。

公開された25元の記事 ウォンの賞賛0 ビュー580

おすすめ

転載: blog.csdn.net/RaymondCoder/article/details/105104367