ReentrantLock与synchronized的区别

简介: ReentrantLock与synchronized的区别

synchronized 基于代码块的方式控制加锁与解锁

ReentrantLock 基于 lock(加锁) 与 unlock(解锁) 方式控制加锁与解锁

🔎区别1

synchronized 只是单纯的加锁与解锁

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

ReentrantLock 对于加锁失败提供了额外的 tryLock方法

通过tryLock方法可以直接返回false, 由程序员决定接下来做什么


🔎区别2

synchronized 是一个非公平锁

ReentrantLock 提供了公平锁与非公平锁两种

默认状态下是一个非公平锁

对于 ReentrantLock 的公平锁, 需要在构造方法中加入 true


🔎区别3

对于synchronized

通常搭配 wait, notify 进行使用

如果多个线程 wait 同一个对象, 那么 notify 的时候是随机的

对于ReentrantLock

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


🔎结尾

创作不易,如果对您有帮助,希望您能点个免费的赞👍

大家有什么不太理解的,可以私信或者评论区留言,一起加油

目录
打赏
0
0
0
0
1
分享
相关文章
synchronized的原理以及与ReentrantLock的区别
`synchronized`和`ReentrantLock`均为Java线程同步机制,确保共享资源的单一时刻独占访问。`synchronized`关键字直接嵌入JVM,可通过修饰方法或代码块实现对象锁或监视器锁,具备可重入性,依赖Mark Word进行锁状态管理。`ReentrantLock`则需显式调用`lock()`和`unlock()`,提供更灵活控制,如公平锁、尝试锁及条件变量。两者在语法、灵活性和异常处理上有所差异,但均支持可重入性。性能方面,随JDK优化,`synchronized`在某些场景下甚至优于`ReentrantLock`。选择使用哪个取决于具体需求和上下文。
Synchronized你又知道多少?
Synchronized 是 JVM 实现的一种互斥同步机制,通过 monitorenter 和 monitorexit 指令控制对象锁的获取与释放。锁的本质是对象头的标记,确保同一时间只有一个线程访问资源。Synchronized 支持可重入性,允许方法内部调用其他同步方法而不阻塞。JVM 对锁进行了优化,引入了自旋锁、偏向锁、轻量级锁和重量级锁,以减少系统开销。Synchronized 属于悲观锁,而乐观锁基于 CAS(Compare and Swap)算法实现非阻塞同步,提高并发性能。
94 9
Java多线程:synchronized关键字和ReentrantLock的区别,为什么我们可能需要使用ReentrantLock而不是synchronized?
Java多线程:synchronized关键字和ReentrantLock的区别,为什么我们可能需要使用ReentrantLock而不是synchronized?
86 0
|
9月前
synchronized与ReentrantLock区别与联系
synchronized与ReentrantLock区别与联系
45 0
ReentrantLock和Synchronized简单比较
ReentrantLock和Synchronized简单比较
60 0
在Synchronized和ReentrantLock之间选择
在Synchronized和ReentrantLock之间选择
55 0
synchronized 和 ReentrantLock 的实现原理是什么?它们有什么区别
synchronized 和 ReentrantLock 的实现原理是什么?它们有什么区别
92 0
【JUC基础】05. Synchronized和ReentrantLock
前面两篇中分别讲了Synchronized和ReentrantLock。两种方式都能实现同步锁,且也都能解决多线程的并发问题。那么这两个有什么区别呢? 这个也是一个高频的面经题。
121 0