synchronized和CAS锁的区别【图文教程】

平凡也就两个字: 懒和惰;
成功也就两个字: 苦和勤;
优秀也就两个字: 你和我。
跟着我从0学习JAVA、spring全家桶和linux运维等知识,带你从懵懂少年走向人生巅峰,迎娶白富美!
关注微信公众号【 IT特靠谱 】,每一篇文章都是心得总结,跟我学习你就是大牛!

synchronized和CAS锁的区别【图文教程】

(1)一个是悲观锁,一个是乐观锁

Synchronized:是一种悲观锁

      会导致未获得锁的线程阻塞,等待持有锁的线程释放锁。

CAS(compare and swap):是一种乐观锁

      乐观锁就是假设多个线程执行某个任务,不会有冲突,保存/更新数据的时候,如果数据又冲突,那么就保存失败回滚。自旋锁就是循环执行失败的线程,知道成功为止的过程(这个过程就叫自旋),就叫自旋锁。CAS其实就是乐观锁的一种实现,广泛应用于Atomic原子操作类,Lock锁,ConcurrentHashMap等线程安全的容器中。

      Compare and swap翻译过来就是比较并替换,比较传入的旧值是否与存放地址上的值相同,如果相同,则将新的值替换存放地址上的值;如果传入的旧值是否与存放地址上的值不相同,那么继续循环这个比较并替换操作,直到成功!

      CAS底层的native操作数据的方法是原子操作,也就是单个数据级别的原子操作

(2)场景使用不同

      synchronized适用于并发比较高的情况,cas常用在并发比较低的情况下。

(3)原子性范围不同

      CAS机制所保证的只是一个变量的原子性操作,而不能保证整个代码块的原子性。比如需要保证3个变量进行原子性的更新,就不得不使用Synchronized了。

      如果以上教程对您有帮助,为了不迷路,请关注一下吧~

 

猜你喜欢

转载自blog.csdn.net/IT_Most/article/details/108780823