Synchronized、Lock、ReentrantLock区别

以下内容整理自互联网,仅用于个人学习


Lock以及它的一个实现类ReentrantLock是jdk5新增加的, Lock也可以用于实现多线程的同步。

区别:

  • 用法上的不同:
  1. synchronized既可以加在方法上,也可以加载特定代码块上,而lock需要显示地指定起始位置和终止位置。
  2. synchronized是托管给JVM执行的,lock的锁定是通过代码实现的,它有比synchronized更精确的线程语义。
  • 性能上的不同:
    lock接口的实现类ReentrantLock,不仅具有和synchronized相同的并发性和内存语义,还多了锁投票、定时锁、等候和中断锁等。
    在竞争不是很激烈的情况下,synchronized的性能优于ReentrantLock,竞争激烈的情况下synchronized的性能会下降的非常快,而ReentrantLock则基本不变。
  • 锁机制不同:
    synchronized获取锁和释放锁的方式都是在块结构中,当获取多个锁时,必须以相反的顺序释放,并且是自动解锁。而Lock则需要开发人员手动释放,并且必须在finally中释放,否则会引起死锁。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容