AQS 与 LockSupport
1.结构

Lock的实现类其实都是构建在AbstractQueuedSynchronizer上,每个Lock实现类都持有自己内部类Sync的实例
二。二元信号量
A semaphore initialized to one, and which is used such that it only has at most one permit available, can serve as a mutual exclusion
lock. This is more commonly known as a binary semaphore, because it only has two states: one permit available, or zero permits
available. When used in this way, the binary semaphore has the property (unlike many Lock implementations), that the "lock" can be
released by a thread other than the owner (as semaphores have no notion of ownership). This can be useful in some specialized
contexts, such as deadlock recovery.
信号量初始化为1,有且仅有一个可用,称为互斥现象锁,常称为二元信号量,因为它仅有两个状态:一个permit 可用,或零个permit可用。
二元信号量可以实现锁被自身线程释放,而不是线程的所有者释放。因为信号量没有所有者的概念。这在死锁恢复时特别有用。
三。LockSupport
This class associates, with each thread that uses it, a permit (in the sense of the Semaphore class). A call to park will return immediately
if the permit is available, consuming it in the process; otherwise it may block. A call to unpark makes the permit available, if it was not
already available. (Unlike with Semaphores though, permits do not accumulate. There is at most one.)
每个使用LockSupport的线程都和一个permit相关联, 如果permit可用,调用park()会立即返回。
park 是停车之意
dormant 休眠
spuriously 伪造地
public static void park()
Disables the current thread for thread scheduling purposes unless the permit is available.
除非permit可用,否则当前线程不能运行。
If the permit is available then it is consumed and the call returns immediately; otherwise the current thread becomes disabled for thread
scheduling purposes and lies dormant until one of three things happens:
1.Some other thread invokes unpark with the current thread as the target
2.Some other thread interrupts the current thread
3.The call spuriously (that is, for no reason) returns
This method does not report which of these caused the method to return. Callers should re-check the conditions which caused the thread
to park in the first place. Callers may also determine, for example, the interrupt status of the thread upon return.
AQS 与 LockSupport的更多相关文章
- Java多线程系列--AQS之 LockSupport
concurrent包是基于AQS (AbstractQueuedSynchronizer)框架的,AQS(JAVA CAS原理.unsafe.AQS)框架借助于两个类: Unsafe(提供CAS操作 ...
- 高效并发JUC锁-砖石
JUC包的锁(可重入锁和读写锁) Lock是JAVA5增加的内容,在JUC(java.util.concurrent.locks)包下面,作者是并发大师Doug Lea.JUC包提供了很多封装的锁,包 ...
- Java 如何中断和恢复线程的执行
一.线程的状态 线程可以阻塞于四种状态: 1.当线程执行Thread.sleep()时,它一直阻塞到指定的毫秒时间之后,或者阻塞被另一个线程打断: 2.当线程碰到一条wait()语句时,它会一直阻塞到 ...
- AQS2:可重入和阻塞
本文仅基于可重入的锁(ReentrantLock类)对AQS做分析,只考虑独占锁. 共享锁与独占锁的更多信息,以后再讨论. AQS中队列的实现 节点Node AQS的节点包含了对前置节点的引用pre, ...
- Java并发包源码学习系列:阻塞队列BlockingQueue及实现原理分析
目录 本篇要点 什么是阻塞队列 阻塞队列提供的方法 阻塞队列的七种实现 TransferQueue和BlockingQueue的区别 1.ArrayBlockingQueue 2.LinkedBloc ...
- 从软件(Java/hotspot/Linux)到硬件(硬件架构)分析互斥操作的本质
先上结论: 一切互斥操作的依赖是 自旋锁(spin_lock),互斥量(semaphore)等其他需要队列的实现均需要自选锁保证临界区互斥访问. 而自旋锁需要xcmpchg等类似的可提供CAS操作的硬 ...
- 【Java并发编程实战】----- AQS(三):阻塞、唤醒:LockSupport
在上篇博客([Java并发编程实战]----- AQS(二):获取锁.释放锁)中提到,当一个线程加入到CLH队列中时,如果不是头节点是需要判断该节点是否需要挂起:在释放锁后,需要唤醒该线程的继任节点 ...
- Java并发包源码学习之AQS框架(三)LockSupport和interrupt
接着上一篇文章今天我们来介绍下LockSupport和Java中线程的中断(interrupt). 其实除了LockSupport,Java之初就有Object对象的wait和notify方法可以实现 ...
- AQS阻塞唤醒工具LockSupport
LockSupport在JDK源码中描述为:构建锁和其他同步类的基本线程阻塞原语,构建更高级别的同步工具集.LockSupport提供的park/unpark从线程的粒度上进行阻塞和唤醒,park/u ...
随机推荐
- Java的内存模型
"让计算机并发执行若干个运算任务"与"更充分地利用计算机处理器的效能"之间的因果关系,看起来顺理成章,实际上它们之间的关系并没有想象中的那么简单,其中一个重要的 ...
- 简单几何(线段相交+最短路) POJ 1556 The Doors
题目传送门 题意:从(0, 5)走到(10, 5),中间有一些门,走的路是直线,问最短的距离 分析:关键是建图,可以保存所有的点,两点连通的条件是线段和中间的线段都不相交,建立有向图,然后用Dijks ...
- 基于Extjs的web表单设计器 第六节——界面框架设计
基于Extjs的web表单设计器 基于Extjs的web表单设计器 第一节 基于Extjs的web表单设计器 第二节——表单控件设计 基于Extjs的web表单设计器 第三节——控件拖放 基于Extj ...
- 2015ACM/ICPC亚洲区长春站 A hdu 5527 Too Rich
Too Rich Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- 核反应堆[HDU2085]
核反应堆 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- BZOJ3570 : DZY Loves Physics I
考虑两个质量均为m,速度分别v1.v2的小球发生完全弹性碰撞的影响: 由动能守恒得: $\frac{1}{2}mv_1^2+\frac{1}{2}mv_2^2=\frac{1}{2}mv_1'^2+\ ...
- BZOJ3941 : [Usaco2015 Feb]Fencing the Herd
若所有点同侧则表明将各个点带入直线解析式ax+by-c后得到的值均同号等价于最大值和最小值同号考虑CDQ分治,每一步分治的过程中求出上下凸壳,然后三分答案即可时间复杂度$O(n\log^2n)$ #i ...
- 关于 Xcode bitcode 错误
关于 bitcode 报错 有类似上图关于bitcode的错误用以下方法解决:
- Get the image file(s) some informations,Including the Make,Model,Date/Time,etc
This is a blog about how to get the image file(s) some informations.Including the Make,Model,Date/Ti ...
- 安卓学习笔记---Activity
由于学期实训的要求,我开始学习安卓了.从本月一号开始,学了五天了.时间短,刚学到的东西容易忘,我记一下笔记. 首先是对Activity的理解.activity首先是一个java类,我们创建一个新的ac ...