Java并发编程专题(五)中,ReentrantLock的原理与使用方法详解?
- 内容介绍
- 文章标签
- 相关推荐
本文共计3108个文字,预计阅读时间需要13分钟。
上一节,我们了解了Lock接口的一些基本说明,知道了Lock锁的常用形式,那么这一节,我们将正式开始学习JUC锁(java.util.concurrent包下的锁)。下面,我们来查看一下Lock最常用的实现类R。
上一节我们了解了Lock接口的一些简单的说明,知道Lock锁的常用形式,那么这节我们正式开始进入JUC锁(java.util.concurrent包下的锁,简称JUC锁)。下面我们来看一下Lock最常用的实现类ReentrantLock。
1.ReentrantLock简介
由单词意思我们可以知道这是可重入的意思。那么可重入对于锁而言到底意味着什么呢?简单来说,它有一个与锁相关的获取计数器,如果拥有锁的某个线程再次得到锁,那么获取计数器就加1,然后锁需要被释放两次才能获得真正释放。这模仿了 synchronized 的语义;如果线程进入由线程已经拥有的监控器保护的 synchronized 块,就允许线程继续进行,当线程退出第二个(或者后续) synchronized 块的时候,不释放锁,只有线程退出它进入的监控器保护的第一个 synchronized 块时,才释放锁。
本文共计3108个文字,预计阅读时间需要13分钟。
上一节,我们了解了Lock接口的一些基本说明,知道了Lock锁的常用形式,那么这一节,我们将正式开始学习JUC锁(java.util.concurrent包下的锁)。下面,我们来查看一下Lock最常用的实现类R。
上一节我们了解了Lock接口的一些简单的说明,知道Lock锁的常用形式,那么这节我们正式开始进入JUC锁(java.util.concurrent包下的锁,简称JUC锁)。下面我们来看一下Lock最常用的实现类ReentrantLock。
1.ReentrantLock简介
由单词意思我们可以知道这是可重入的意思。那么可重入对于锁而言到底意味着什么呢?简单来说,它有一个与锁相关的获取计数器,如果拥有锁的某个线程再次得到锁,那么获取计数器就加1,然后锁需要被释放两次才能获得真正释放。这模仿了 synchronized 的语义;如果线程进入由线程已经拥有的监控器保护的 synchronized 块,就允许线程继续进行,当线程退出第二个(或者后续) synchronized 块的时候,不释放锁,只有线程退出它进入的监控器保护的第一个 synchronized 块时,才释放锁。

