首页 > 图灵资讯 > 技术篇>正文

跟 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 它更灵活,可以提供更多的控制和功能,但使用相对复杂。

上一篇 源码级别的广播与监听实现
下一篇 乐鑫esp8266基于freeRtos实现私有服务器本地远程OTA升级

文章素材均来源于网络,如有侵权,请联系管理员删除。