3

私の理解では、AtomicReferenceArrayクラスを使用すると、個々の要素をアトミックに更新できます。これにより、コレクションがスレッドセーフになります。並行コレクションでは、さまざまなアルゴリズムを使用して、コレクションをスレッドセーフにするだけでなく、ノンブロッキングにすることもできます。一部のコレクション クラスは、 のような便利なメソッドや、add(...)キューイングのような特定の機能を提供することを理解しています。しかし、それを無視して、要素の追加と取得だけに集中すると、AtomicReferenceArray ではなく、並行コレクションの 1 つを使用する理由があるでしょうか?

また、性能はどうですか?

4

3 に答える 3

12

AtomicReferenceArray ではなく、並行コレクションの 1 つを使用する理由はありますか?

はい、動的にサイズ変更されるコレクションが必要な場合。を使用AtomicReferenceArrayすると、配列内の要素をアトミックに取得および設定できますが、配列のサイズを大きくすることはできません。

2 つのスレッドはwithおよびその他のメソッドで同じ要素を確実に変更できますが、コレクションのように配列にデータを追加することはできません。たとえば、各スレッドが一意の ID を持っていて、配列内の個人の値を更新している場合、を使用すると便利です。ただし、ジョブをワーク リストに追加したいプロデューサーが 2 人いる場合、これは機能しません。AtomicReferenceArraycompareAndSet(...)AtomicReferenceArray

最後に、 の複雑さはAtomicReferenceArray、真の並行コレクションよりもはるかに少なくなります。並行コレクションにより、反復子、削除、追加などを同時に安全に行うことができます。このAtomicReferenceArrayクラスは、スピン ループやその他の機能のテストと設定を可能にしますが、本格的なコレクションの代わりとしては適していません。

于 2013-01-22T18:45:05.967 に答える
0

同時非ブロッキング コレクション アルゴリズムは、マルチコア マシン上でブロッキング アルゴリズムよりも桁違いに優れています。これが、並行アルゴリズムを優先する最も重要な理由です。

ノンブロッキング アルゴリズムの大幅なパフォーマンス向上について詳しくは、 LMAXアーキテクチャをご覧ください。

于 2013-01-22T18:47:11.127 に答える
-1

並行コレクションとAtomicReferenceArraysにはほとんど共通点がありません。それらをどのように比較したいかわからない。それらは異なる目的と特性を持っています。

于 2013-01-22T23:12:32.813 に答える