ReentrantLock加锁和解锁原理说明?

娜扎 Java面经 发布时间:2022-05-14 23:50:18 阅读数:3529 1
下文笔者讲述ReentrantLock加锁和解锁的相关简介说明,如下所示

加锁过程

   ReentrantLock加锁
     实际上调用NonfairSync/FairSync中的lock方法
        lock方法,首先调用compareAndSetState(0, 1)方法
         如果当前state是0,就改成1,同时调用setExclusiveOwnerThread方法将持有锁线程设置为当前线程,加锁成功;
         如果当前state不是0,表示锁被别的线程持有,就用 acquire(1) 方法尝试获取锁
          acquire(1) 首先会用 tryAcquire(1) 方法尝试获取锁,该方法会判断state值,是0
             那就进行步骤2的操作;不是0但是当前线程等于正持有锁的线程
           那就让 state 加1,这就是可重入原理,以上两种情况都不是,获取锁失败
               tryAcquire(1)失败就会调用acquireQueued方法将当前线程加入到队列自旋 
                最后会调用LockSupport的 park 方法获取锁。

释放锁过程

 
释放锁:
    调用NonfairSync/FairSync中release方法
     release调用tryRelease(1)方法 
     tryRelease(1)会将当前state减1,同时把当前持有锁的线程设置为null 
     最后调用unparkSuccessor方法
     该方法里面调用lockSupport的unpark方法释放锁
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaMianJing/202205/16525444663376.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者