スレッドセーフI原因問題の伝統的なセットは、私たちはスレッドセーフなコレクションを使用する必要があります。
図1は、代わりにHashMapのConcurrentHashMapの、小さなセグメントの内部のConcurrentHashMapさらに細分化HashMapの番号を使用する、デフォルトは16です。
2、ConcurrentSkipListMapの:リアライズジャンプテーブル。整然とした、バランスの取れたツリー、階層リスト、ジャンプクエリ、時間のためのスペース:、すぐに見つける機能をテーブルジャンプのデータ構造を使用して、地図です。
3、代わりにベクトルのArrayListを使用します。
4、CopyOnWriteArrayListと:パフォーマンスのリストを書くためにどのくらいの機会読みははるかに良いベクトルよりも、非常に良いです。ロックされたときに書かれた、ロックを解除し、元の配列のコピーは再び、そう、新しい配列を生成し、その後、書き込みに、この配列をコピーし、元の配列と、その後修正の配列を置き換えます読みます読み取り操作がある場合、元の配列の変化がないため、同じ時間の書き込みで、それは紛争の問題ではないでしょう。
5、ConcurrentLinkedQueue:リンクリストの実装スレッドセーフLinkdeList(ロック-CASを達成するために使用される基本的なメカニズム)を使用して効率的な同時キュー(待ち行列最高のパフォーマンス高同時実行環境)、ConcurrentLinkedQueue(非ブロックアンバウンド形式のキュー)脆弱な、列は、データの損失を引き起こす可能性があり、列を待たない、待つことはありません。
6、BlockingQueueのインタフェース(ブロック)のみ実行可能なインターフェイスを使用して格納するために使用される
動作モードを
カラムに
データを挿入するとき、キューの総数が(ブロッキング)待機する超える
列
データを取得する際、空である、待機(閉塞性)
を入力
キューに直接SynchronousQueueを
容量ことなく、各インサートは、削除操作に対応する各挿入操作を待つ必要があり、削除応答、およびその逆を待たなければなりません。ウィルはないタスクの保存、直接実行のスレッドに、新しいスレッドを作成するために、アイドル状態のスレッドの試みが存在しない、実行されるスレッドの最大数は、ポリシーを否定します。そのため、一般的に、それ以外の場合は拒否戦略を実行するのは簡単です、maximumPoolSizeに大きな値を設定
ArrayBlockingQueueは、タスクキュー囲まれた
能力を与えられたが、コアがない複数のスレッドの最大数よりの前提の下で、作成されるスレッドの数よりも大きい場合には、新しいタスクがあれば、作成していきます、で来ますスレッドの最大数よりも大きい、ポリシー拒否実行
書かれた
プランのすぐ()戻り待ち行列が偽いっぱいある
キュー位置にスペースがあるまで、キューがいっぱいになったとき、PUT()が待っています
読み出し
世論調査は()戻り直接キューが空のヌル
キューの要素を有するまで)(待機を取ります
LinkedBlockingQueue無制限タスクキュー
システムリソースがなくなるまで、それ以外のミッションは、チームが失敗したことはありません
孤立ロックを、別のロックが(とり)とプット()操作の使用、ロック競合の可能性を弱めます。フェッチデータと書き込みデータの分離を達成するために、それは本当の意味の中の両方になり、同時に使用できる操作です
ProorityBlockingQueueプライオリティキューの
プライオリティキュー、制御タスク、特別なアンバウンド形式のキューと実行順序。
7、ツールが私たちを助けることができるコレクションは、並行処理レベルで、通常は十分な、任意のセットセーフコレクションにパックされるすべての入力された待機状態のセットのすべての操作を引き起こし、ロックするので、高いものではない
Collections.synchronizedMap(新しいHashMapの());
Collections.synchronizedList(LinkedListの新しい新規の<string>());
......関連のコレクションツールは、それらをリストしません。