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中释放,否则会引起死锁。

你可能感兴趣的:(Synchronized、Lock、ReentrantLock区别)