static boolean unsynchronizedSetter(Date expected){
Date newDate = new Date();
AtomicReference<Date> myAtomicReference = Lookup.getAtomicRef();
boolean myStatus = myAtomicReference.compareAndSet(expected, newDate); //CAS
return myStatus;
}
Q: 2 つのスレッドがそれを実行する場合、どのオブジェクトがアトミック参照に格納されますか?
マルチプロセッサ マシンでは、2 つのスレッドが同じクロック サイクルで CAS を実行できます。どちらも同じ myAtomicReference オブジェクトを使用して CAS を実行し、どちらも正しい値の "expected" を使用していますが、2 つの異なるオブジェクト、つまり 2 つの newDate を入れようとしているとします。そのうちの 1 つが失敗する必要がありますが、そのスレッドで myStatus は false になりますか?
CompareAndSwap の 1 つのハードウェア実装では、更新を行うためにスレッドをキューに入れると思います。2 つのプロセッサが同じクロック サイクルで CAS 命令を実行している場合でも、そのうちの 1 つが遅れている可能性があります。