美文网首页
线程-可重入[读写]锁实现机制

线程-可重入[读写]锁实现机制

作者: 码农崛起 | 来源:发表于2018-05-04 13:02 被阅读0次

所谓可重入指的是同一个线程再次获取已经拥有的锁时无需等待。

1, ReentrantLock
可重入锁是互斥锁,根据AQS实现机制的分析,只需要实现tryAcquire和tryRelease维护state的含义即可。ReentrantLock可以指定锁是否公平,所谓公平就是指当一个线程要获取锁时,如果已经有线程在排队,它必须乖乖去排队,所谓不公平是指当队列头的线程被唤醒之后获取锁的过程中,允许当前请求锁的线程跟它竞争。

state:
0:表示当前没有线程获得锁
n>0:表示当前获取锁的线程获取了n次锁

不公平锁.png 公平锁.png 释放锁.png

2, ReentrantReadWriteLock
可重入读写锁是互斥和共享混合的锁

state:
低16bit:0表示没有互斥锁,>0表示当前获取互斥锁的线程获取锁的次数
高16bit:表示所有线程获取共享锁的次数

另外每个线程获取共享锁的次数会保存在ThreadLocal里。

tryRelease.png tryAcquire.png tryReleaseShared.png tryAcquireShared.png fullTryAcquireShared-1.png fullTryAcquireShared-2.png

3,CountDownLatch:等待的n个线程阻塞直到n个条件在其他线程满足

CountDownLatch.png

非常简单,state表示共享锁获取次数,对象构造时表示已经获取了n次共享锁。
每次countDown释放一次共享锁,await只是阻塞在获取共享锁上,只有当前共享锁全部释放时所有获取共享锁的线程才会成功。

4,Semaphore:限流,控制可访问资源的线程数

共享锁,state表示当前获取共享锁的次数,构造时指定上限。


tryReleaseShared.png tryAcquireShared.png nonfairTryAcquireShared.png

5,CyclicBarrier:n个线程执行到某个点时互相等待,然后同时继续执行。

状态.png

CyclicBarrier直接利用ReentrantLock关联的condition variable实现。

await-1.png

每次有线程到达指定点时调用await,计数器减1,归0时唤醒所有线程。

await-2.png

否则等待大家都到齐后被唤醒或超时。

nextGeneration.png

6,Phaser
Phaser本身是单链表,表示多个阶段,每个阶段可以动态改变互相等待的线程数,大家都到齐之后进入下一个阶段。

本节完。。。。。。

相关文章

  • 线程-可重入[读写]锁实现机制

    所谓可重入指的是同一个线程再次获取已经拥有的锁时无需等待。 1, ReentrantLock可重入锁是互斥锁,根据...

  • 读写锁实现

    读写锁 ReentrantReadWriteLock可重入读写锁(实现ReadWriteLock接口) 使用:Re...

  • Java中的各种锁

    一个线程中的多个流程能不能获取同一把锁:可重入锁和非可重入锁 可重入锁 可重入性:表明了锁的分配机制,是基于线程的...

  • 2018-03-01

    随记 1.多线程锁机制之ReentrankLock可重入锁2.RabbitMQ实现消息优先级机制 概况 粗略理解为...

  • Java - ReentrantReadWriteLock的读写

    ReentrantReadWriteLock是可重入读写锁,底层依赖AQS实现,读写锁的竞争通过state的高位和...

  • 读写锁

    读写锁在 Java 的实现是 ReentrantReadWriteLock,称为可重入读写锁。其与 Reentra...

  • 多线程篇五(ReentrantLock源码解析 公平锁与非公平锁

    前言ReentrantLock类是实现了Lock接口的可重入锁,所谓可重入锁指的是以线程为单位,当一个线程获取对象...

  • golang可重入锁的实现

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

  • synchronized

    java 底层提供的一种同步机制(关键字) 可重入(偏向锁时 当前线程可重入)异常会释放锁,如果不想被释放,可以c...

  • ReentrantReadWriteLock代码浅析

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

网友评论

      本文标题:线程-可重入[读写]锁实现机制

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