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