2 つのマルチスレッド Java プログラムで実験を行っています。同期されていないものと、を使用しているものがありAtomicInteger
ます。はAtomicInteger
はるかに遅いです。AtomicInteger
これは、メソッドusesが原因である可能性があると思いますcompareAndset()
。私は正しいですか?
2 に答える
1
もちろん、同期の安全性にはいくらかのパフォーマンス コストが伴います。たとえば、同期のコストを参照してください。
于 2012-12-08T00:22:48.030 に答える
1
クラスとそのAtomicInteger
兄弟は、純粋な Java で記述できる同等の機能と同じくらい高速であり、プラットフォームで利用可能なネイティブ命令を使用できる可能性が高いため、多くの場合より高速です。
並行プログラムを作成するときは常に、java.util.concurrency
パッケージを使用してください。orで記述するものよりも堅牢で効率的です。synchronized
volatile
1 つのスレッドによる操作は、両方のスレッドが適切なメモリ バリアを使用している場合にのみ、別のスレッドから見えることが保証されます。たとえば、volatile
変数の書き込みと読み取り、synchronized
ブロックへの入力などです。メモリバリアをスキップすると高速になりますが、プログラムが壊れているため、効率はゼロです。
于 2012-12-08T00:47:19.887 に答える