几句话总结CAS锁与synchronized差异

其实网上有很多做过实验对比的,这里就不一一叙述了,
总的来说就是,竞争少的情况下CAS优于synchronized,反之synchronized优于CAS。
刚开始接触CAS的时候,一听说是锁,还是非阻塞的,就觉得肯定比加锁快,其实不然,还是得透过现象看本质,不要管中窥豹。
我尝试用几句话总结:

  • CAS:一般是系统底层的一套指令,作用就是同一时刻做这套指令的时候,其他相同的指令的线程不会干扰,保持原子性,常用于自旋锁。
  • synchronized:加锁,同步代码块或者函数,当一个线程拿到锁后,其他线程等待,直到拿到锁的时候释放锁。

根据上述,我们可以知道,CAS失败的情况下,自旋锁会一直旋转,synchronized虽然不会旋转,但是在获得锁的情况下,除了异常,其他情况下是肯定成功的。
所以两者的时间差别就是,自旋的时间和线程上下文切换的时间,虽然在其他资源在充足情况下,自旋成功下的时间肯定比线程加锁要来的快,但是你考虑下,如果竞争很激烈的情况下,是不是只有一个CAS能成功,那么其他的都是失败自旋,那么在这种情况下,CPU的资源的消耗可以说十分大的,那我还不如给这个共享资源加锁,剩下的线程等待不占用CPU资源,这种情况下,你可以考虑负载均衡,你可以考虑在别的情况下并行或者并发处理别的事务,都可以,否则如果遇到stop world 的情况就得不偿失了。
希望大家指点和交流,谢谢!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文首发于我的个人博客:尾尾部落 本文是我刷了几十篇一线互联网校招java后端开发岗位的面经后总结的多线程相关题目...
    繁著阅读 6,125评论 0 7
  • Java8张图 11、字符串不变性 12、equals()方法、hashCode()方法的区别 13、...
    Miley_MOJIE阅读 9,128评论 0 11
  • 1.感恩早上女儿非常听话,早早起床!每天早上自己穿衣,洗脸,吃饭,戴红领巾,自立能力越来越强啦! 2.感恩老公这几...
    马保存阅读 1,378评论 0 0
  • 王小波在黑铁时代中写道:“黑铁时代的象征是那支鹅毛笔。……这个男人面临两种选择,一是沿着黑暗的小路继续前进,到一间...
    果安愚阅读 4,346评论 0 1
  • 又下雨了,连续两三天一直雨不停,夏天的雨后,空气是凉爽的,让人觉得很舒服。秋天的雨后凉爽中又有点寒冷。穿着薄衣服会...
    元气满满吖阅读 1,235评论 0 0