码迷,mamicode.com
首页 > 其他好文 > 详细

关于synchronized和lock的差异对比(已录入memo)

时间:2021-03-02 12:29:27      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:访问共享   通过   锁的获取和释放   虚拟机   控制   并发   比较   声明   扩展   

一句话总结:

简述口诀: synchronized,获取释放,虚拟机,降低死锁

  Lock释放获取很随意,公平中断多同步

一:synchronized和Lock的比较

synchronized1:简单, 隐式地获取锁,将锁的获取和释放固化,也就是先获取再释放。

               2多种优化方案(偏向锁,轻量锁)

             3锁的释放由虚拟机完成,不用人工干预,降低了死锁的可能  

Lock 1拥有了锁获取与释放的可操作性、

     2能实现公平锁、中断锁等多种操作等多种同步特性

 缺点:需要手动调用unlock方法, 新手操作失误容易死锁

二:举个例子:

如果我要手把手进行锁获取和释放,先获锁A,然后再获锁B,当锁B获得后,释放锁A同时获取锁C.   这种明显只有lock能实现,   而僵硬的synchronized不行.

正文:、synchronized和Lock的比较
synchronized
优点:1、使用简单,语义清晰,哪里需要点哪里
2、由JVM提供,提供了多种优化方案(锁粗化、偏向锁、轻量锁)
3、锁的释放由虚拟机完成,不用人工干预,也降低了死锁的可能性(只有一个关键字不用手动释放锁unlock)
缺点:无法实现一些锁的高级功能如:公平锁、中断锁、超时锁、共享锁等
Lock
-优点:1、拥有了锁获取与释放的可操作性、能实现公平锁、中断锁、超时锁、共享锁等多种

2、可以实现更多的功能,如让synchronized的缺点更多
-缺点:需要手动释放锁unlock,新手使用不当可能造成死锁--


其他资料:

锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源(但是有些锁可以允许多个线程并发的访问共享资源,比如读写锁)。

在Lock接口出现之前,Java程序是靠synchronized关键字实现锁功能的,而Java SE 5之后,并发包中新增了Lock接口(以及相关实现类)用来实现锁功能,

它提供了与synchronized关键字类似的同步功能,只是在使用时需要显式地获取和释放锁。虽然它缺少了(通过synchronized块或者方法所提供的)隐式获取释放锁的便捷性,但是却拥有了锁获取与释放的可操作性、可中断的获取锁以及超时获取锁等多种synchronized关键字所不具备的同步特性。

使用synchronized关键字将会隐式地获取锁,但是它将锁的获取和释放固化了,也就是先获取再释放。当然,这种方式简化了同步的管理,可是扩展性没有显示的锁获取和释放来的好。例如,针对一个场景,手把手进行锁获取和释放,先获得锁A,然后再获取锁B,当锁B获得后,释放锁A同时获取锁C,当锁C获得后,再释放B同时获取锁D,以此类推。这种场景下, synchronized关键字就不那么容易实现了,而使用Lock却容易许多。

4、synchronized和Lock的比较
synchronized
优点:1、使用简单,语义清晰,哪里需要点哪里
2、由JVM提供,提供了多种优化方案(锁粗化、偏向锁、轻量锁)
3、锁的释放由虚拟机完成,不用人工干预,也降低了死锁的可能性(只有一个关键字不用手动释放锁unlock)
缺点:无法实现一些锁的高级功能如:公平锁、中断锁、超时锁、共享锁等
Lock
-优点:1、所有synchronized的缺点 、
2、可以实现更多的功能,如让synchronized的缺点更多
-缺点:需要手动释放锁unlock,新手使用不当可能造成死锁

————————————————
版权声明:本文为CSDN博主「qq_24045275」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_24045275/article/details/104862430

关于synchronized和lock的差异对比(已录入memo)

标签:访问共享   通过   锁的获取和释放   虚拟机   控制   并发   比较   声明   扩展   

原文地址:https://www.cnblogs.com/qqyouxiang602287384/p/14466857.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!