深入浅出AQS之组件概览
来源:互联网 发布:新日铁住金软件上海 编辑:程序博客网 时间:2024/06/06 09:03
之前分析了AQS中的独占锁,共享锁,条件队列三大模块,现在从结构上来看看AQS各个组件的情况。
原文地址:http://www.jianshu.com/p/49b86f9cd7ab
深入浅出AQS之独占锁模式
深入浅出AQS之共享锁模式
深入浅出AQS之条件队列
前面三篇文章如果之前没有AQS基础的话看起来会比较吃力,这篇文章说明一下AQS的基础知识,方便快速了解AQS。
首先AQS的基本执行过程就是尝试获取锁,成功则返回,如果失败就进入同步队列进行锁资源的等待。基于这个流程可以看出队列跟队列中的节点应该是两个重点。
首先来看下AQS里队列节点Node的结构:
该类中有五个字段,依次来看一下:
1. prev,next:指向它的前置节点跟后继节点,由此看出AQS中的同步队列是个双向链表。
2. thread:当前线程对象。
3. waitStatus:当前节点的状态,是个int类型变量,依次有如下几种:
4. nextWaiter:如果当前节点是共享模式,该值会指向一个SHARE节点。如果当前节点是在条件队列中,则该值会指向下一个等待条件的节点。
了解了Node节点的数据结构以后,看下独占锁模式下的同步队列的结构:
注:head节点是new出来一个新的Node节点,而tail是直接指向队列中最后一个节点。
了解了独占锁模式队列以后,看下共享锁模式下的同步队列(注意对比其中的不同):
注:共享锁跟独占锁是同一个同步队列,也就是说同步队列中的节点既可以是共享类型也可以是独占类型。
除了独占锁跟共享锁使用的同步队列,还有一个很重要的队列就是条件队列,一起看下:
注意区分条件队列跟同步队列的区别:1、头尾指针,2、单链表
搞明白了AQS中这些基础的数据结构以后,最后再看下AQS对外提供的API:
独占锁模式:
共享锁模式:
条件队列:
扩展API:
了解了上面介绍的关于AQS的基础数据结构及API以后,再去看我之前写的三篇分别介绍独占锁,共享锁,条件队列实现原理的文章就不会云里雾里了。
- 深入浅出AQS之组件概览
- 深入浅出AQS之条件队列
- 深入浅出AQS之独占锁模式
- 深入浅出AQS之共享锁模式
- Android应用组件之概览屏幕
- java多线程 之 AQS
- JUC之AQS
- JUC之AQS框架
- Java并发之AQS
- 多线程之AQS原理
- Android四大组件之--Activity的深入浅出
- Android四大组件之--Activity的深入浅出
- Hadoop组件概览
- Boost常用组件概览
- AQS
- AQS
- AQS
- aqs
- 跳出语句:go to,break,return,continue的差别
- 《提问艺术》读书笔记
- HDU 2059 龟兔赛跑 (dp)
- Wannafly挑战赛1 CMMSet2(lca)
- VS2013新建asp.net空网站项目失败,配置IISexpress失败,未能找到web服务器“http://localhost”解决方案
- 深入浅出AQS之组件概览
- Numpy.tile() (Python)
- UVALive
- 幻灯片转换为一页多张讲义打印格式
- 事务
- 大家设计数据库时是否使用外键
- Spring Boot 读取配置文件的几种方式
- leetcode.394 Decode String
- javascript作用域与作用域链、闭包、对象创建模式、继承模式