8.5 CAS

概念

JNI(Java本地方法):使得java程序越过JVM直接调用本地方法提供了一种便捷的方式;

CAS:1.是现代 CPU 广泛支持的一种对内存中的共享数据进行操作的一种特殊指令,会对内存中的共享数据做原子的读写操作;

            2.compare and swap比较并交换,利用CPU的CAS指令,同时借助JNI来完成Java的非阻塞算法;

            3.有3个操作数,当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则返回V;

            4.Synchronized是一种悲观锁,它认为在它修改之前,一定会有其它线程去修改它,悲观锁效率很低;

            5.CAS是乐观锁的思路,它相信在它修改之前,没有其它线程去修改它;


存在问题

1.ABA问题:如果一个值原来是A,变成了B,又变成了A,那么使用CAS进行检查时会发现它的值没有发生变化,但是实际上却变化了;

2.循环时间长开销大:自旋CAS如果长时间不成功,会给CPU带来非常大的执行开销;

3.只能保证一个共享变量的原子操作:多个共享变量操作时,循环CAS就无法保证操作的原子性;


©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Java8张图 11、字符串不变性 12、equals()方法、hashCode()方法的区别 13、...
    Miley_MOJIE阅读 3,956评论 0 11
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 43,002评论 11 349
  • CAS简历 CAS(Compare and swap)比较和替换是设计并发算法时用到的一种技术 。Compare ...
    classtag阅读 4,229评论 2 37
  • 时光,一直斡旋在黑色的云端, 过去,是所有故事开场的后来。 我还能清晰地触碰到那些枝枝桠桠, 交错,纠葛,如戟,如...
    路还长天会亮阅读 397评论 0 0
  • 谢胜捷 轻轻的想起 经年的双卡录音机 浮沉的往事 从脑海里 路过飘摇的岁月 梦呓里的靡靡之音 美丽了 邓丽君的容颜...
    胜捷阅读 441评论 0 0

友情链接更多精彩内容