知识卡片
可重入锁允许自己再进
内容
可重入指同一线程可以对同一把锁重复加锁而不死锁:外层函数持锁后,内层函数再次获取同一把锁依然能成功,锁内部维护持有计数,同线程加锁计数加一、解锁减一,归零才真正释放。ReentrantLock 顾名思义是可重入的独占锁,synchronized 同样具备这个特性,这是默认行为而非可选特性。[[乐观读必须验证快照]] 的 StampedLock 恰是反例,它不可重入,重复获取会死锁。
参考来源
- 位置:《Java高并发核心编程.卷2,多线程、锁、JMM、JUC、高并发设计模式》第5章《JUC显式锁的原理与实战》5.1.2节《可重入锁ReentrantLock》(源文件:_epub-src/OEBPS/Text/chapter156.xhtml)
- 结论依据:原文定义"可重入的含义:表示该锁能够支持一个线程对资源的重复加锁,也就是说,一个线程可以多次进入同一个锁所同步的临界区代码块。比如,同一线程在外层函数获得锁后,在内层函数能再次获取该锁,甚至多次抢占到同一把锁",因此推出本卡结论。
- 原始内容:可重入的含义:表示该锁能够支持一个线程对资源的重复加锁,也就是说,一个线程可以多次进入同一个锁所同步的临界区代码块。比如,同一线程在外层函数获得锁后,在内层函数能再次获取该锁,甚至多次抢占到同一把锁。