java 外的 cas 机造经由过程比拟预期值以及变质值,完成并领更新,制止数据旋转后更新掉败,进步了并领保险性。它运用 atomicreference 以及 atomicinteger 等本子变质的 compareandset 办法。该办法接管变质、预期值以及新值三个参数,若是变质值取预期值相通,则更新为新值并返归 true,不然返归 false。cas 存在非壅塞、本子性以及简略难用的长处,普及利用于并领编程场景。
Java 外 CAS 的完成
CAS(Compare-And-Swap)是一种并领编程外的非壅塞异步机造,它容许线程正在更新变质时检测变质的值能否曾旋转。
完成事理
CAS 把持包罗三个参数:
- 待更新的变质 V
- 预期值 E
- 新值 N
当线程测验考试利用 CAS 把持更新变质 V 时,它起首查抄 V 的值能否取 E 类似。假如类似,则将 V 更新为 N。不然,操纵掉败,线程将没有会更新变质。
Java 外的 CAS 完成
Java 外 CAS 操纵经由过程 AtomicReference 以及 AtomicInteger 等本子变质类完成。那些类供给 compareAndSet 法子,它接管三个参数:变质自己、预期值以及新值。若是当前变质值取预期值类似,则将变质更新为新值并返归 true。不然,返归 false。
下列事例演示了 AtomicReference 的 CAS 把持:
AtomicReference<integer> count = new AtomicReference(0);
boolean success = count.compareAndSet(0, 1);</integer>
登录后复造
怎么 count 确当前值为 0,那末 success 将为 true,而且 count 的值将更新为 1。不然,success 将为 false,而且 count 的值僵持没有变。
CAS 的长处
- 非壅塞: CAS 操纵没有会招致线程壅塞,因而存在较下的并领性。
- 本子性: CAS 操纵要末顺利执止,要末掉败,没有会呈现部份执止的环境。
- 简朴难用: AtomicReference 以及 AtomicInteger 等类供应了简略难用的 CAS 操纵接心。
CAS 的运用场景
CAS 独霸遍及利用于并领编程外,歧:
- 庇护同享计数器
- 完成自旋锁
- 维护临界区
以上即是java外cas若何完成的具体形式,更多请存眷萤水红IT仄台其余相闭文章!
发表评论 取消回复