美文网首页工作生活
重入锁实现方式

重入锁实现方式

作者: whynotybb | 来源:发表于2019-07-04 17:29 被阅读0次

重入性

解决重入性的两个关键问题:

1,在线程获取锁的时候,如果已经获取锁的线程是当前线程的话则直接再次获取成功;

2,由于锁会被获取n次,那么只有锁在被释放同样的n次后,才算完全释放成功。

非公平锁获取锁

主要逻辑如下:

1,如果同步状态为0,表示当前没有线程持有锁,则获取成功,并且设置持有锁的线程为当前线程。

2,如果同步状态大于0,表示当前已经有线程持有锁,判断持有锁的线程是不是当前线程,如果不是,则无法获取锁,返回false,如果是,则可以再次获得锁,并设置同步状态,返回true。

释放锁

逻辑:

c=当前同步状态-1;

1,如果c==0,则释放锁成功,返回true,

2,如果c不为0,说明还没有彻底释放,返回false。

另外值得一提的是synchronize也是支持可重入的。

公平锁与非公平锁

默认为非公平锁 公平锁与非公平锁

公平锁和非公平锁是ReentrantLock的两个内部类,都实现了另外一个内部类Sync,Sync实现了AQS。

公平锁

公平锁与非公平锁的区别:公平锁在获取锁时满足FIFO。

公平锁获取锁的源码

这里有区别的地方在hasQueuedProcessors():该方法的意义是判断在同步队列中,当前结点是否有前驱结点。如果有,则直接返回false,如果当前结点是头结点,则再去做能不能成功获取锁的判断。

相关文章

  • java可重入锁

    可重入概念: java的可重入锁: 可重入锁的一种实现方式: 可重入锁的两种使用例子: 例子1: 例子2: 例子1...

  • 重入锁实现方式

    重入性 解决重入性的两个关键问题: 1,在线程获取锁的时候,如果已经获取锁的线程是当前线程的话则直接再次获取成功;...

  • Java并发编程-重入锁

    章节目录 什么是重入锁 底层实现-如何实现重入 公平与非公平获取锁的区别与底层实现 1.什么是重入锁 1.1 重入...

  • java.util.concurrent.locks.Reent

    什么是重入锁 重入锁就是指重复进入锁,它表示该锁能够支持一个线程对资源的重复加锁。 重入锁继承与实现关系 重入锁的...

  • J.U.C-AQS-ReentrantLock

    ReentrantLock(可重入锁)和synchronized区别 可重入性 锁的实现(ReentrantLoc...

  • 死磕 java同步系列之ReentrantLock源码解析(一)

    问题 (1)重入锁是什么? (2)ReentrantLock如何实现重入锁? (3)ReentrantLock为什...

  • golang可重入锁的实现

    如何实现可重入锁?实现一个可重入锁需要这两点:1.记住持有锁的线程2.统计重入的次数 转自golangroadma...

  • ReentrantReadWriteLock代码浅析

    介绍 除了重入锁ReentrantLock以外,Doug Lea大神还顺带实现了读写重入锁ReentrantRea...

  • zookeeper 分布式锁实现

    分布锁实现方案和优缺点先占坑锁重入待实现!!!

  • 大佬浅谈分布式锁

    redis 实现 redis 分布锁一、redis 实现分布式锁(可重入锁)redission 实现分布式锁1、对...

网友评论

    本文标题:重入锁实现方式

    本文链接:https://www.haomeiwen.com/subject/xcgrhctx.html