如果我有类似的东西:

AtomicReference<String> atomicReference = new AtomicReference<>("abc");


我有2个线程执行代码:

线程1:atomicReference.compareAndSet("abc", "def")

线程2:atomicReference.compareAndSet("abc", "efg")

是否有可能两个线程同时执行此操作并找到已声明的值“ abc”并都执行该方法
还是如果一个线程执行compareandset另一个线程必须等到它完成(基本上是某种锁定机制)?

最佳答案

通常,合理的实现不会对原子compareAndSet使用锁。一些旧的/非常低端的32位体系结构可能对AtomicLong使用锁。

方法主体(某些体系结构)可能一次允许一个以上的线程执行,但只有一个可以成功。

08-16 02:40