スレッド安全性の問題のセット

ArrayListの、HashSetのはそこでは、スレッドの安全性の問題になりますjava.util.ConcurrentModifycationExceptionがスローされますマルチスレッド

原因は次のとおりです。

そのような人としての競争への同時リードは、一貫性のないデータの異常、同時変更例外で、その結果、グラブに別の人が書いています。

スレッドの安全性の問題のプログラムを解決するためのArrayList

一覧<文字列>リスト=新しいベクトル<>(); 方案1

一覧<文字列>一覧= Collections.synchronizedList(新しいArrayListを<>()); 方案2

一覧<文字列>リスト=新しいCopyOnWriteArrayListと、3つのjuc以下のスキーム

HashSetのは、スレッドの安全性の問題のプログラムを解きます

セット<文字列>リスト= Collections.synchronizedSet(新しいHashSetの<>()); 方案1

リスト一覧=新しいCopyOnWriteArraySet <文字列>、以下のスキーム2 juc、ここで、CopyOnWriteArraySetクラスのコンストラクタ呼び出しや新しいCopyOnWriteArrayListと() 

 

 

 CopyOnWriteArrayListとで見てみましょう

 

 分離の基本となるソースコードを追加し、コピー・オン・ライト、読み取りと書き込み

 

 おそらくコンテナが現在のオブジェクトに直接でない場合、コンテナに要素を追加し、最初のロックことを意味[]追加しますが、最初に現在のコンテナOject []行為のコピーは、追加するにはObjcet [] newElementsに新しいコンテナを再現します要素は、追加要素が完了した後、その後、新しいコンテナはsetArray(たnewElements)に元の容器を参照し、そうすることの利点は、現在のコンテナは、任意の要素を追加していないので、それがロックすることなく、コピーオンライト・コンテナによって複雑にすることができます読み取ることがあります。また、コンテナの別々の読み取りと書き込みのコピーオンライトコンテナのアイデア、異なる読み取りおよび書き込みであります

おすすめ

転載: www.cnblogs.com/liuyi13535496566/p/12131197.html