我使用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
怎么样?
答案 0 :(得分:3)
查看compareAndSet(int expect,int update)的合同:
...错误返回表示实际值不等于预期值。
因此,如果暗示,如果仅这些线程正在访问该值并且您已确认 当前位于if ($request.status !== undefined && $request.status === 0) {
return;
}
,那么仅限所有失败的方法是1
处的不。 QED。
答案 1 :(得分:2)
线程可以被另一个原因打破......我不确定我的问题是否正确......
我会说,如果没有其他原因,这是不可能的 看看AtomicInteger impl:
public final boolean compareAndSet(int expect, int update) {
return unsafe.compareAndSwapInt(this, valueOffset, expect, update);
}
public final native boolean compareAndSwapInt(Object var1, long var2, int var4, int var5);