AQS原理简介说明

乔欣 Java面经 发布时间:2022-11-12 22:44:38 阅读数:13229 1 并发编程面试题(2023最新版)
下文笔者讲述AQS同步锁的原理说明,如下所示

AQS原理

AQS的工作流程:
   1.当共享资源空闲 
        设置请求资源的线程为当前有效工作线程
		设置共享资源的锁定状态
   2.当共享资源被占用
        AQS使用CLH队列锁,将无法获取锁的线程加入到队列中
		由AQS对队列进行操作,实现线程的等待和唤醒、锁分配操作

CLH队列简介

 CLH(Craig,Landin,and Hagersten)队列:
    是一个虚拟的双向队列(虚拟的双向队列即不存在队列实例,仅存在结点之间的关联关系)
  AQS是将每条请求共享资源的线程封装成一个CLH锁队列的一个结点(Node)来进行锁的分配
AQS原理说明

AQS中其它重要事项说明

AQS使用一个int成员变量来表示同步状态
AQS使用内置FIFO队列来完成获取资源线程的排队工作
AQS使用CAS对该同步状态进行原子操作实现对其值的修改


private volatile int state;//共享变量,使用volatile修饰保证线程可见性
状态信息通过protected类型的getState,setState,compareAndSetState进行操作

//返回同步状态的当前值-
protected final int getState() {  
    return state;
}
// 设置同步状态的值
protected final void setState(int newState) { 
    state = newState;
}
//CAS操作---将同步状态值设置为给定值update如果当前同步状态的值等于expect(期望值)
protected final boolean compareAndSetState(int expect, int update) {
    return unsafe.compareAndSwapInt(this, stateOffset, expect, update);
}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaMianJing/202211/16682657974887.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者