栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

多线程之AQS初识

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

多线程之AQS初识

抽象队列同步器AQS(AbstractQueuedSynchronizer):
AQS具备特性:
阻塞等待队列
共享/独占
公平/非公平
可重入
允许中断

ReentrantLock:
是基于AQS实现的:互斥,支持公平性
ReentrantLock lock = new ReentrantLock(false);//false为非公平锁,true为公平锁,不传参默认非公平锁
如何实现公平与非公平性?
在ReentrantLock内部定义了一个Sync内部类,该类继承了AbstractQueuedSynchronized,对该抽象类的部分方法做了实现,并且还定义了两个子类
1.fairSync    公平锁的实现
2.NonfairSync 非公平锁的实现
这两个类都继承了Sync,也就是间接继承了AbstractQueuedSynchronized,所以ReentrantLock同时具备公平性和非公平性
涉及的设计模式:模板模式--->子类根据需要做具体业务实现
实现原理分析:
lock.lock();//加锁
自旋,判断是否加锁成功
LockSupport.park();===>阻塞线程
lock.unlock();//解锁
LockSupport.unpark(要唤醒的线程);===>唤醒park()阻塞的线程
锁的实现核心:
自旋,LockSupport,CAS(比较与交换==>原子操作,依赖汇编语言指令:cmpxchg()),队列

AbstractQueuedSynchronizer几个重要参数:
exclusiveOwnerThread:记录当前获取锁的线程
state:状态器
公平锁:
同步等待队列(CLH):双向链表结构,FIFO先进先出

tryAcquire(arg);//锁竞争逻辑
addWaiter(Node.EXCLUSIVE);//线程入队,Node节点,对thread的引用
创建节点:几个重要属性:pre,next,thread,waitStatus
节点的生命状态:信号量

详见下一章。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/696874.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号