1
私は1つのAtomicLong変数でマルチスレッド、すべてのスレッド共有とプロセスを実行するプログラムを持っています。それぞれはまずgetAndAdd()
メソッドを呼び出して値を取得し、さらに処理します。AtomicLongのgetAndAddメソッドはスレッドを待ちますか?
すべてのスレッドが同時に実行されている場合、上記のメソッドを呼び出すと、あるスレッドが他のスレッドが値を取得するのを待つことになりますか?
彼らは価値を得るまで何もしないだろうという意味ですか? パフォーマンスに影響を与えているのだろうか? –
彼らは何もしません、彼らは100%CPUを使用するように(ビジー待機中)ループします。しかし、それは通常の競合条件では長く続くことはありません。もしあなたのプログラムが何千ものスレッドを持っていて 'getAndAdd'以外の何かをしているのなら、あなたは高いCPU使用率に気付くでしょうが、それは非現実的なシナリオです。 – assylias
参照:http://stackoverflow.com/questions/2664172/java-concurrency-cas-vs-locking – assylias