如果我有类似的东西:
AtomicReference<String> atomicReference = new AtomicReference<>("abc");
我有2个执行代码的线程:
线程1: atomicReference.compareAndSet("abc", "def")
线程2: atomicReference.compareAndSet("abc", "efg")
[在某些情况下,两个线程同时执行此操作并找到已声明的值“ abc”并都执行该方法还是如果一个线程执行compareandset另一个线程必须等到它完成(基本上是某种锁定机制)?
[通常,合理的实现不会为原子compareAndSet
使用锁。一些旧的/非常低端的32位体系结构可能会对AtomicLong
使用锁。
方法主体(某些体系结构)可能一次允许一个以上的线程执行,但只有一个可以成功。
也许两个线程可能同时执行。但是总是只有一个“赢家”,只有一个会成功。
摘自文档: