16

と の意味に違いはありAtomicIntegerArrayますAtomicInteger[]か? また、どちらがより高速に使用できますか? (私が気付いたのは、最初に使用するスペースがはるかに少ないということだけですが、これは、各再チェックが配列の境界をチェックしていることを意味するため、遅くなるでしょうか?)

編集:配列が事前に初期化されているシナリオ。

4

4 に答える 4

10

AtomicInteger[]要素ごとにオブジェクトが必要になります。オブジェクトと配列オブジェクトAtomicIntegerArrayが必要なだけです。AtomicIntegerArrayしたがって、可能であれば後者を使用してください。

通常の配列の場合でも、境界チェックのコストは非常に小さいです。重要なのは、複数のプロセッサから同じキャッシュ ライン内のデータにアクセスすると、重大なパフォーマンスの問題が発生する可能性があることです。したがって、オブジェクトを分離するか、意図的に配列の要素を近づけないようにすることが役立ちます。

于 2009-03-28T12:19:41.913 に答える
8
  • AtomicInteger[] は、スレッド セーフな整数の配列です。
  • AtomicIntegerArray はスレッドセーフな整数の配列です。
于 2009-03-28T14:23:10.617 に答える
1

トム・ホーティンの最初の段落に同意します…</ p>

AtomicInteger[]要素ごとにオブジェクトが必要になります。オブジェクトと配列オブジェクトAtomicIntegerArrayが必要です。AtomicIntegerArrayしたがって、可能であれば後者を使用してください。

AtomicInteger[]…しかし、スレッドセーフではないことにも注意する必要があります。具体的には、個々のAtomicIntegerオブジェクトへの配列の参照は、複数のスレッドからアクセスされた場合、正しい場合と正しくない場合があります。ただし、配列オブジェクト自体へのアクセスを同期すると、この問題は解消されます。

于 2009-03-28T13:42:28.047 に答える