compareAndSet() 注意点
2015-05-07 22:18
99 查看
compareAndSet()与weakCompareAndSet()是有条件的修改程序的方法,这两个方法都要取用两个参数:在方法启动时预期数据所具有的的值,以及要把数据所设定成的值。它们都只会在变量具有预期值的时候才会设定成新值,如果当前值不等于预期值,该变量就不会被重新赋值并且返回false。这两个方法之间有什么区别吗?第二个方法少了一项保证:如果方法返回的值false,该变量不会被变动,但是这并不表示现有值不是预期值,也就是说,这个方法不管初始值是否是预期值都可能会无法更新改值--这个很重要,由于cas的那个循环原理,就算是初始值和预期值一样,也有可能 不会被改成新值 比如 automicInteger 对象初始为1,现在compareAndSet(1,2),虽然初始值和预期值都为1,但这个对象的值最终有可能 会 出现 没有被改成新值2,但 如果初始值和预期值不一样的话一定不会被改为新值,所以在用这个方法时要考虑到这一点,比如 玩家 通过这个值来做一个行为,如果由于 初始值和预期值一样结果也还没有改变为新值的话导致操作行为失败如果直接在逻辑中return回去,即本次行为不合法重新重试该行为 可以 重来的话那就可以 考虑用这个方法了,不然必须要注意这一点,即就算一样也不一定会改。
相关文章推荐
- Java里的CompareAndSet(CAS)
- Java里的CompareAndSet(CAS)
- 理解java.util.concurrent.atomic中的compareAndSet
- Java中的CompareAndSet(CAS)
- No known class method for selector 'setImage:andName:'错误分析.//删除.h与.m文件时的注意事项
- java Atomic compareAndSet部分原理分析
- java线程--无锁CAS(CompareAndSet比较交换)
- AtomicBoolean类 getAndSet 方法和 compareAndSet方法的区别
- Java多线程编程学习笔记 synchronized的理解 原子操作 actomic compareAndSet
- Java中的CompareAndSet(CAS)
- Java里的CompareAndSet(CAS)
- Java里的CompareAndSet(CAS)
- Java里的CompareAndSet(CAS)
- CAS(compareAndSet)算法及简单应用AtomicInteger
- java内存模型与volatile变量与Atomic的compareAndSet
- Java里的CompareAndSet(CAS)
- ICPCCamp 2016 Day 6 - Spb SU and Spb AU Contest(Set intersection-随机)
- WPF1: Set and Get value for a control in a form which run in another thread
- Xamarin.Android set no title and no icon
- 如何设置Java桌面程序界面外观(How to Set the Look and Feel)