010マルチスレッド-JUCコレクション-queue、ConcurrentLinkedQueue

I.概要

ConcurrentLinkedQueueは「高い同時実行」のシーンに適用されるスレッドセーフなキューです。
リンクノードに基づく、アンバウンド形式のスレッドセーフなキューはFIFO(先入れ先出し)で、原則としてソート要素に応じて、です。キュー要素に(特殊なノード内部実装を除く)がnull要素を配置されています。

1.1、原則とデータ構造

  説明
1. ConcurrentLinkedQueueはAbstractQueueから継承されました。

2. ConcurrentLinkedQueue内部は、リンクされたリストによって達成されます。また、リストのヘッドノードとテール・ノード尾の頭が含まれています。FIFO(先入れ先出しで)原則に従ってソートConcurrentLinkedQueue要素。要素は尾からのリストに挿入され、頭部から戻るようになりました。

次のタイプノード3 ConcurrentLinkedQueueリストは揮発性であり、データ項目タイプのリストは、揮発性です。「この揮発性変数ことがvolatile変数に読み込まれ、常に(任意のスレッド)を見ることができ、最後の書き込み。」:について私たちは、それは意味が含ま知っている、揮発性 ConcurrentLinkedQueueは、揮発性により、リソースの競合にマルチスレッドの排他的アクセスを達成することです。

1.2例

/ *
 LinkedListのは、スレッドセーフではないながら* ConcurrentLinkedQueueは、「スレッドセーフ」キューです。
 *
 *以下は、「複数のスレッドが同時に動作し、キューをトラバース」の一例です
 *(01)キューがConcurrentLinkedQueueオブジェクトであるとき、プログラムが正常に実行することができます。
 キューがLinkedListのオブジェクトであるとき*(02)、プログラムはConcurrentModificationExceptionが例外を生成します。
 *
 * / 
パブリック・ クラスConcurrentLinkedQueueDemo1 {

    // TODO:キューはLinkedListのオブジェクトである場合には、プログラムが間違って行くでしょう。
    // プライベート静的キュー<文字列> =新しい新しいキューのLinkedList <文字列>(); 
    プライベート 静的キュー<文字列>キュー= 新しい新しい ConcurrentLinkedQueue <文字列> ();

    パブリック 静的 ボイドメイン(文字列[]引数){

        // 同じ時間は動作するキューに2つのスレッドを開始します!
        新しい新 MyThread( "TA" ).start();
         新しい新 MyThread( "TB" ).start();
    }

    プライベート 静的 無効のprintAll(){
        String値。
        反復子ITER = queue.iterator()。
        一方、(iter.hasNext()){ = (文字列)iter.next();
            System.out.print(値 + "" )。
        }
        System.out.println();
    }

    プライベート 静的 クラス MyThreadは拡張スレッドを{
        MyThread(文字列名){
            スーパー(名);
        }

        @オーバーライド
        公共 ボイドラン(){
             int型 I = 0を一方、(I ++ <6 ){
                 // 「线程名」+ " - " + "序号" 
                。文字列のval =にThread.currentThread()のgetName()+ I。
                queue.add(ヴァル)。
                // 「イテレータ」でキューを通過します。
                printAll();
            }
        }
    }
}

結果は示して:あなたは、キューのLinkedListオブジェクトのソースコードを変更すると、プログラムはConcurrentModificationExceptionが例外を生成します。

1.3利用シナリオ

第二に、ソースコード解析

 

 

 

 

 

おすすめ

転載: www.cnblogs.com/bjlhx/p/11075331.html