AQS原理简介说明
下文笔者讲述AQS同步锁的原理说明,如下所示
AQS原理
AQS的工作流程:
1.当共享资源空闲
设置请求资源的线程为当前有效工作线程
设置共享资源的锁定状态
2.当共享资源被占用
AQS使用CLH队列锁,将无法获取锁的线程加入到队列中
由AQS对队列进行操作,实现线程的等待和唤醒、锁分配操作
CLH队列简介
CLH(Craig,Landin,and Hagersten)队列:
是一个虚拟的双向队列(虚拟的双向队列即不存在队列实例,仅存在结点之间的关联关系)
AQS是将每条请求共享资源的线程封装成一个CLH锁队列的一个结点(Node)来进行锁的分配
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);
}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


