1

2 つのマルチスレッド Java プログラムで実験を行っています。同期されていないものと、を使用しているものがありAtomicIntegerます。はAtomicIntegerはるかに遅いです。AtomicIntegerこれは、メソッドusesが原因である可能性があると思いますcompareAndset()。私は正しいですか?

4

2 に答える 2

1

もちろん、同期の安全性にはいくらかのパフォーマンス コストが伴います。たとえば、同期のコストを参照してください。

于 2012-12-08T00:22:48.030 に答える
1

クラスとそのAtomicInteger兄弟は、純粋な Java で記述できる同等の機能と同じくらい高速であり、プラットフォームで利用可能なネイティブ命令を使用できる可能性が高いため、多くの場合より高速です。

並行プログラムを作成するときは常に、java.util.concurrencyパッケージを使用してください。orで記述するものよりも堅牢効率的です。synchronizedvolatile

1 つのスレッドによる操作は、両方のスレッドが適切なメモリ バリアを使用している場合にのみ、別のスレッドから見えることが保証されます。たとえば、volatile変数の書き込みと読み取り、synchronizedブロックへの入力などです。メモリバリアをスキップすると高速になりますが、プログラムが壊れているため、効率はゼロです。

于 2012-12-08T00:47:19.887 に答える