java - 所有线程的compareAndSet 都会失败吗?

标签 java multithreading compare-and-swap atomicinteger

我正在使用 AtomicInteger 来比较和设置同步状态。这是它

private final AtomicInteger state = new AtomicInteger(1);

public void tryDo(){
    if(state.compareAndSet(1, 2)){
        //do some usefule
    }
}

问题是以下情况是否可能:

  1. 状态 = 1
  2. 两个或多个线程尝试将状态compareAndSet2
  3. 2. 处的所有线程均失败,状态仍为 1

有记录吗?它依赖于平台吗? x86-64 怎么样?

最佳答案

查看契约(Contract) compareAndSet(int expect,int update) :

... False return indicates that the actual value was not equal to the expected value.

因此,暗示,如果只有这些线程正在访问该值,并且您已确认该值当前位于1,则 < strong>唯一所有失败的原因是NOT位于1。量子ED。

关于java - 所有线程的compareAndSet 都会失败吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49673683/

相关文章:

java - 如何使我的一些矩形成为黄金(比率)?

java - 多线程在Web应用程序中的作用

java - 循环遍历 LinkedList

Android 4.0 asynctask 同时不可能

c - 具有不 protected 并发修改的比较和交换行为

java - 为什么在线程锁定 (Java/C++) 上使用比较和交换,这是由一定的争用频率决定的吗?

java-8 - CAS 与同步性能

java - 如何使用Java中的Vietea公式计算三次函数?

java - 如何更新进度条并在需要时停止它?

java - 关于父类(super class)和子类构造函数的问题