ReentrantLock与synchronized的区别

ReentrantLock与synchronized的区别

  • 区别1
  • 区别2
  • 区别3
  • 结尾

synchronized 基于代码块的方式控制加锁与解锁
ReentrantLock 基于 lock(加锁) 与 unlock(解锁) 方式控制加锁与解锁

区别1

synchronized 只是单纯的加锁与解锁

ReentrantLock 对于加锁成功与synchronized 并无区别

ReentrantLock 对于加锁失败提供了额外的 tryLock方法
通过tryLock方法可以直接返回false, 由程序员决定接下来做什么


区别2

synchronized 是一个非公平锁

ReentrantLock 提供了公平锁与非公平锁两种
默认状态下是一个非公平锁
对于 ReentrantLock 的公平锁, 需要在构造方法中加入 true
ReentrantLock与synchronized的区别_第1张图片


区别3

对于synchronized
通常搭配 wait, notify 进行使用
如果多个线程 wait 同一个对象, 那么 notify 的时候是随机的

对于ReentrantLock
通常搭配 Condition 这个类, 这个类也能起到等待通知的作用, 而且当多个线程等待同一个对象时, 可以指定一个线程通知


结尾

创作不易,如果对您有帮助,希望您能点个免费的赞
大家有什么不太理解的,可以私信或者评论区留言,一起加油

你可能感兴趣的:(JavaEE,java,开发语言)