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 ...
随机推荐
- Ajax 学习之获取服务器的值
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- Unity制作游戏中的场景
Unity制作游戏中的场景 1.2.3 场景 在Unity中,场景(Scene)就是游戏开发者制作游戏时,所使用的游戏场景.它是一个三维空间,对应的三维坐标轴分别是X轴.Y轴和Z轴本文选自Unity ...
- Ajax跨域通信方法
1.Jsonp.document.domain+iframe.window.name.window.postMessage.服务器上设置代理页面. 2.Jsonp(json with padding) ...
- C Golden gun的巧克力
Time Limit:1000MS Memory Limit:65535K 题型: 编程题 语言: 无限制 描述 众所周知,13级有尊大神Golden gun,人称根叔,简称金枪!众立志进校队的 ...
- 判断 ACdream 1202 Integer in C++
题目传送门 /* 分情况讨论,在long long范围里可以直接比较 sscanf 直接读到n中去 */ #include <cstdio> #include <iostream&g ...
- mount part中位置的作用
比如部件A上有个mount part,通过它与部件B装配.mount part与B是通过fixed joint 链接的,所以这个coordinate reference位置就决定了fixed join ...
- sql 关联查询
SELECT mms_sample_datas.* from mms_sample_datas where mms_sample_datas.mms_id in ( SELECT mms_sample ...
- windows 8 项目
展示图 建议搜索: 线路查询: 应用商店式瀑布浏览(语义缩放): 路线规划:
- CentOS 多网卡绑定bonding
1.查看环境 ip a |grep -v lo 2.加载bonding模块 modprobe bonding 3.开机自动加载模块到内核 echo 'modprobe bonding &> ...
- Eclipse开发JavaWeb程序报Server Tomcat v7.0 at localhost was unable to start
出处:http://www.javaweb1024.com/info/582.jspx 原因重现: Eclipse开发JavaWeb程序,启动Servers的Tomcat服务器,突然跳出弹出框,内容显 ...