2017-10-22 4 views
0

CopyOnWriteArrayListを使用するのに当てはまる場合については、私は何の説明も見つけられません。CopyOnWriteArrayListを使用する場合に適用

同じタイトルの質問In what situations is the CopyOnWriteArrayList suitable?があります。しかし、それは他の質問スレッドと重複しているので閉じています。私は両方のスレッドが質問に答えていないと思うので、私はこの質問スレッドを開始しました。 In what situations is the CopyOnWriteArrayList suitable?については

、それは実際にあなたが反復突然変異

上回っリストを持っている。しかし、私は、実際のアプリケーションシナリオが見つからなかった場合CopyOnWriteArrayListは非常に効率的

であることを点灯します。 How can CopyOnWriteArrayList be thread-safe?については、実際にCompyOnWriteArrayListがスレッドセーフである理由に重点を置いています。

ご回答ありがとうございます。 Javadocに基づい

+0

@ JoeCコメントをいただきありがとうございます。上記のとおり、「どのような状況でCopyOnWriteArrayListが適切か」とそれが指し示す別の重複スレッドの両方で満足のいく答えが見つかりませんでした。そして、実際には、複製スレッド "どのようにCopyOnWriteArrayListをスレッドセーフにすることができますか?"本当に別の話です。これが私がこのスレッドを立ち上げた理由です。ありがとう。 – Gearon

+0

そして、あなたの質問を編集して、そこにある答えがなぜあなたの質問に答えられないのかを明確にしてください。 –

+0

@JoeCありがとう、私は質問でより明確にそれを明確にしましょう。 – Gearon

答えて

3

、すべての変更 操作は(セットを追加する、など)の新鮮 コピーを作成することによって実現されるjava.util.ArrayList内のスレッドセーフな変異体基本となる配列

ご覧のとおり、コンテナの変更は、特にコンテナ内のデータのサイズが大きい場合にコストがかかります。

修正頻度が低い場合はCopyOnWriteArrayListを使用する方が良いです。 JCIPによって示唆されるように、

コピー・オン・ライトコレクションは 反復がはるかに一般的な変更以外の場合にのみ使用するのが妥当です。

たとえば、イベント通知システム。イベントが通知される必要があるたびにコンテナを反復しますが、オブザーバーが変更されたときにのみ変更されます。前者の出現頻度は高いが、後者は頻度が低い。

関連する問題