我正在使用AtomicInteger
比较并设置同步状态。就这个
private final AtomicInteger state = new AtomicInteger(1);
public void tryDo(){
if(state.compareAndSet(1, 2)){
//do some usefule
}
}
问题是,是否可能出现以下情况:
state = 1
两个或更多个线程试图将状态
compareAndSet
更改为2
2.
处的所有线程均失败,状态保持为1
有文件记录吗?是否依赖平台?
x86-64
怎么样? 最佳答案
请参见compareAndSet(int expect,int update)的合同:
...错误返回表示实际值不等于期望值。
因此,暗含的是,如果只有这些线程正在访问该值,并且您已确认该值当前位于1
处,则所有失败的唯一方法是如果该值不在1
处。 QED。