と の意味に違いはありAtomicIntegerArray
ますAtomicInteger[]
か? また、どちらがより高速に使用できますか? (私が気付いたのは、最初に使用するスペースがはるかに少ないということだけですが、これは、各再チェックが配列の境界をチェックしていることを意味するため、遅くなるでしょうか?)
編集:配列が事前に初期化されているシナリオ。
と の意味に違いはありAtomicIntegerArray
ますAtomicInteger[]
か? また、どちらがより高速に使用できますか? (私が気付いたのは、最初に使用するスペースがはるかに少ないということだけですが、これは、各再チェックが配列の境界をチェックしていることを意味するため、遅くなるでしょうか?)
編集:配列が事前に初期化されているシナリオ。
AtomicInteger[]
要素ごとにオブジェクトが必要になります。オブジェクトと配列オブジェクトAtomicIntegerArray
が必要なだけです。AtomicIntegerArray
したがって、可能であれば後者を使用してください。
通常の配列の場合でも、境界チェックのコストは非常に小さいです。重要なのは、複数のプロセッサから同じキャッシュ ライン内のデータにアクセスすると、重大なパフォーマンスの問題が発生する可能性があることです。したがって、オブジェクトを分離するか、意図的に配列の要素を近づけないようにすることが役立ちます。
トム・ホーティンの最初の段落に同意します…</ p>
AtomicInteger[]
要素ごとにオブジェクトが必要になります。オブジェクトと配列オブジェクトAtomicIntegerArray
が必要です。AtomicIntegerArray
したがって、可能であれば後者を使用してください。
AtomicInteger[]
…しかし、スレッドセーフではないことにも注意する必要があります。具体的には、個々のAtomicInteger
オブジェクトへの配列の参照は、複数のスレッドからアクセスされた場合、正しい場合と正しくない場合があります。ただし、配列オブジェクト自体へのアクセスを同期すると、この問題は解消されます。