AQS
qq_35986946
这个作者很懒,什么都没留下…
展开
-
AQS简介(2) - 方法
文章目录enq 结点入队addWaiter 添加结点unparkSuccessor 唤醒后继结点setHeadAndPropagate 设置头结点和后继结点状态cancelAcquire 取消尝试shouldParkAfterFailedAcquireselfInterrupt 自我中断parkAndCheckInterruptacquireQueueddoAcquireInterruptibly 中断的方式获取锁doAcquireNanos 超时获取锁doAcquireShared 不中断共享锁relea原创 2020-07-26 22:38:12 · 141 阅读 · 0 评论 -
AQS 简介(1) - 基本元素
文章目录成员变量核心内部类AQS,全称:AbstractQueuedSynchronizer; 提供了一个实现阻塞锁和一系列依赖的FIFO等待队列的同步器框架。AQS 同时提供了互斥模式(exclusive)和共享模式(shared)两种。1、Exclusive:独占,只有一个线程能执行,如ReentrantLock2、Share:共享,多个线程并发执行,如Semaphore、CountDownLatch,CyclicBarrier成员变量//同步队列的头结点private transien原创 2020-07-26 22:37:13 · 133 阅读 · 0 评论 -
ReentrantLock源码分析
在Java5.0之前,协调对共享对象的访问可以使用的机制只有synchronized和volatile。我们知道synchronized关键字实现了内置锁,而volatile关键字保证了多线程的内存可见性。在大多数情况下,这些机制都能很好地完成工作,但却无法实现一些更高级的功能,例如,无法中断一个正在等待获取锁的线程,无法实现限定时间的获取锁机制,无法实现非阻塞结构的加锁规则等。而这些更灵活的加锁...转载 2021-05-05 17:33:18 · 66 阅读 · 0 评论 -
CyclicBarrier 源码分析
我们经常会遇到这样的情景,在进行某个活动前需要等待人全部都齐了才开始。例如吃饭时要等全家人都上座了才动筷子,旅游时要等全部人都到齐了才出发,比赛时要等运动员都上场后才开始。在JUC包中为我们提供了一个同步工具类能够很好的模拟这类场景,它就是CyclicBarrier类。利用CyclicBarrier类可以实现一组线程相互等待,当所有线程都到达某个屏障点后再进行后续的操作。下图演示了这一过程。在C...转载 2021-05-05 17:33:35 · 94 阅读 · 0 评论 -
Semaphore源码分析
Semaphore(信号量)是JUC包中比较常用到的一个类,它是AQS共享模式的一个应用,可以允许多个线程同时对共享资源进行操作,并且可以有效的控制并发数,利用它可以很好的实现流量控制。Semaphore提供了一个许可证的概念,可以把这个许可证看作公共汽车车票,只有成功获取车票的人才能够上车,并且车票是有一定数量的,不可能毫无限制的发下去,这样就会导致公交车超载。所以当车票发完的时候(公交车以满载...转载 2021-05-05 17:33:48 · 81 阅读 · 0 评论