java compareandset 包_java-如果完全像compareAndSet那样实现weakCompareAndSet会失败吗?

(请注意,此问题不是关于CAS的,而是关于“可能偶然失败”的Javadoc)。

这两个方法与AtomicInteger类的两种方法之间的Javadoc唯一区别是,weakCompareAndSet包含以下注释:“可能会虚假失败”。

现在,除非我的眼睛因某种咒语而被欺骗,否则这两种方法的确看起来完全一样:

public final boolean compareAndSet(int expect, int update) {

return unsafe.compareAndSwapInt(this, valueOffset, expect, update);

}

/* ...

* May fail spuriously.

*/

public final boolean weakCompareAndSet(int expect, int update) {

return unsafe.compareAndSwapInt(this, valueOffset, expect, update);

}

因此,我意识到“ May”并不意味着“ Must”,但是为什么我们不都开始将其添加到我们的代码库中:

public void doIt() {

a();

}

/**

* May fail spuriously

*/

public void weakDoIt() {

a();

}

我对那个看上去与compareAndSet()一样的弱CompareAndSet()感到困惑,但是“可能会虚假地失败”,而另一个却不能。

显然,“弱”和“虚假失败”与“先发生”排序有关,但是我对这两种AtomicInteger(和AtomicLong等)方法仍然感到困惑:因为显然它们调用的是完全相同的不安全方法 .compareAndSwapInt方法。

我对Java 1.5引入AtomicInteger感到特别困惑,因此在Java内存模型更改后(显然,它不能“在1.4中错误地失败”,但是其行为更改为“在1.5中不可错误地失败”) 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值