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); }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。