ejb*_*boy 4 java java.util.concurrent compare-and-swap
我想知道在调用之间是否存在任何差异(或可能的副作用):
AtomicBoolean.set(true)
Run Code Online (Sandbox Code Playgroud)
和
AtomicBoolean.compareAndset(false, true)
Run Code Online (Sandbox Code Playgroud)
JavaDoc AtomicBoolean#set状态:
无条件地设置为给定值.
虽然AtomicBoolean#compareAndSet状态:
如果当前值==期望值,则以原子方式将值设置为给定的更新值.
在这两种情况下,该值都将设置为true.那么区别是什么呢?
compareAndset(false, true)false如果值已经返回true.
它实际上相当于!getAndSet(true).
那么你引用的文字明确说明了这两个操作之间的区别.但为了更清楚,如果忽略原子性方面,第一个相当于:
public void set(boolean newValue) {
this.value = newValue;
}
Run Code Online (Sandbox Code Playgroud)
第二个相当于:
public boolean compareAndSet(boolean expected, boolean newValue) {
if (this.value == expected) {
this.value = newValue;
return true;
} else {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
对于您的示例,set(true)将状态设置为true,并将compareAndset(false, true)状态设置为trueiff它尚未存在true.所以,是的,对状态的净影响AtomicBoolean是相同的.
但是,您会注意到return值的大小取决于AtomicBoolean对象的初始状态...因此从该角度来看,即使使用这些参数值,方法也不相同.
| 归档时间: |
|
| 查看次数: |
4323 次 |
| 最近记录: |