一部のsynchronized
ブロックをAtomicBoolean
.
の例を次に示しsynchronized
ます。
public void toggleCondition() {
synchronized (this.mutex) {
if (this.toggled) {
return;
}
this.toggled = true;
// do other stuff
}
}
そして代替AtomicBoolean
:
public void toggleCondition() {
if (!this.condition.getAndSet(true)) {
// do other stuff
}
}
の CAS プロパティを利用AtomicBoolean
すると、同期に依存するよりもはるかに高速になるはずなので、ちょっとしたマイクロ ベンチマークを実行しました。
10 個の同時スレッドと 1000000 回の反復の場合、ブロックAtomicBoolean
よりわずかに高速になります。synchronized
AtomicBoolean を使用した toggleCondition() に費やされた平均時間 (スレッドあたり): 0.0338
同期された状態で toggleCondition() に費やされた平均時間 (スレッドごと): 0.0357
マイクロベンチマークが価値があることは知っていますが、その差はもっと大きくなるべきではありませんか?