美文网首页Java基础
Java基础复习 CAS

Java基础复习 CAS

作者: pj0579 | 来源:发表于2019-09-25 13:50 被阅读0次

    synchronized是一个悲观锁的例子,认为线程并发严重,操作上锁,直到释放锁的时候别的线程才会释放资源。

    CAS操作是一个乐观锁的例子,不上锁,会不断尝试更新。
    内存地址V,旧的预期值A,要修改的新值B。
    CAS操作有三个操作数 A(预期旧值) V(内存地址) B(修改后的新值)
    拿 count = 10 自增做例子(真正的CAS操作需要把变量设置为volatile保证可见性)

    线程A
    内存地址 V = 0xxxxx;
    A = 10;
    B =11;
    这个时候另外一个线程B操作的修改完了内存地址V的值为11
    比较V的值和A不同
    放弃这次操作,开始重试,获取内存地址V,更新
    A=11;
    B=12;
    比较内存V的值和A相同,进行操作
    

    缺点:
    只能保证一个共享变量原子性。
    长期更新不成功比较耗费资源。
    ABA问题(可以使用AtomicStampedReference解决)

    相关文章

      网友评论

        本文标题:Java基础复习 CAS

        本文链接:https://www.haomeiwen.com/subject/wqdmuctx.html