java - Java中的原子compareAndSet方法是否有锁定?

标签 java multithreading concurrency atomic

如果我有类似的东西:

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

我有 2 个线程执行代码:

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

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

是否存在两个线程同时执行该方法并找到声明的值“abc”并且都执行该方法的情况 或者如果一个线程执行compareandset,其他线程将必须等待它完成(基本上是某种锁定机制)?

最佳答案

一般来说,合理的实现不会对原子compareAndSet使用锁。一些旧的/非常低端的 32 位架构可能会使用 AtomicLong 锁。

方法体可能(某些架构)允许同时由多个线程执行,但只有一个线程可以成功。

关于java - Java中的原子compareAndSet方法是否有锁定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61047870/

相关文章:

java - 如何从另一个类读取方法中的变量数据的公共(public)静态并获取更新的数据

java - java中如何使用Lock指定要锁定的对象

ruby-on-rails - 如何使用 Rails 4 同时处理请求?

java - 将行从文件复制到另一个文件

java - DateTimeFormatter 支持单个数字的月份日期和年份月份

c# - 在循环中创建线程时将值传递给c#中的线程启动方法

java - 强制方法调用 null 变量以抛出 NullPointerException

windows - lua lane 线程间通信

java - 控制对 Java 集合的并发访问的最佳方法

java - 查找/设置 Java.awt drawString 字符串的高度