全部评论
重入锁(ReentrantLock)是一种递归无阻塞的同步机制。以前一直认为它是synchronized的简单替代,而且实现机制也不相差太远。不过最近实践过程中发现它们之间还是有着天壤之别。
以下是官方说明:一个可重入的互斥锁定 Lock,它具有与使用 synchronized
方法和语句所访问的隐式监视器锁定相同的一些基本行为和语义,但功能更强大。ReentrantLock
将由最近成功获得锁定,并且还没有释放该锁定的线程所拥有。当锁定没有被另一个线程所拥有时,调用 lock
的线程将成功获取该锁定并返回。如果当前线程已经拥有该锁定,此方法将立即返回。可以使用 isHeldByCurrentThread() 和
getHoldCount() 方法来检查此情况是否发生。
线程获取到锁后还可以再获取这把锁,这就叫重入。内部基于AQS
如果一个线程已经拥有了某一个对象的锁,当执行到需要获取锁的代码段时可以直接进行,无需再次获取锁。不然他会把自己等死
ReentrantLock
底层通过一个
Sync
的静态类实现加锁解锁。
Sync
继承自
AbstractQueuedSynchronizer
,队列同步器
AbstractQueuedSynchronizer
,简称
AQS
,是用来构建锁或者其他同步组件的基础框架。该抽象类内部通过内置的先进先出队列来完成资源获取线程排队工作。
意思就是锁了多次,程序不会报错。
百度递归锁
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 评论 收藏
分享
