当前位置: 首页 > 图灵资讯 > 技术篇> 跟 Synchronized 相比,可重入锁 ReentrantLock 其实现原理有什么不同?

跟 Synchronized 相比,可重入锁 ReentrantLock 其实现原理有什么不同?

来源:图灵教育
时间:2023-06-01 09:41:34

Synchronized 和 ReentrantLock 它们都是用来实现线程同步的工具,但它们的实现原理是不同的。

Synchronized 是 JVM 基于监视器的实现,提供的内置锁,即每个对象都有一个监视器锁(monitor),当线程进入 synchronized 当代码块时,它会尝试获得该对象的监视器锁,如果获得成功,它可以执行代码块,如果获得失败,它将被阻塞,等待锁释放。

ReentrantLock 是基于可重入锁的可重入锁 AbstractQueuedSynchronizer(AQS)的实现,AQS 用于实现同步器的框架,ReentrantLock 利用了 AQS 实现锁定功能的一些特点。ReentrantLock 相对于 Synchronized 例如,它提供了两种模式:公平锁和非公平锁,以及可中断获取锁和加班获取锁。

另外,ReentrantLock 还支持 Condition 条件变量允许线程在获得锁后等待条件满足后执行。

总的来说,Synchronized 如果不需要特别高的灵活性和控制能力,可以直接使用简单易用的锁定机制 Synchronized。而 ReentrantLock 它更灵活,可以提供更多的控制和功能,但使用相对复杂。