AQS是一个同步器的基础类,里面的关键字段:

    //如下关键字段都是volatile类型

    /**
* Head of the wait queue, lazily initialized. Except for
* initialization, it is modified only via method setHead. Note:
* If head exists, its waitStatus is guaranteed not to be
* CANCELLED.
*/
private transient volatile Node head; //获取锁的链式队列的头 /**
* Tail of the wait queue, lazily initialized. Modified only via
* method enq to add new wait node.
*/
private transient volatile Node tail;//获取锁的链式队列的尾 /**
* The synchronization state.
*/
private volatile int state; //记录所的状态

通过如下示例代码进行跟踪查看队列实际细节:

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock; public class AQS {
public static void main(String[] args) throws Exception { final Lock lock = new ReentrantLock(); lock.lock();
lock.lock();
newThread(lock,"lock-1").start();
Thread.sleep(500);
newThread(lock,"lock-2").start();
Thread.sleep(500);
newThread(lock,"lock-3").start();
Thread.sleep(500);
     //断点处,可以在此处进行跟踪
lock.lock(); Thread.sleep(5000000);
lock.unlock();
lock.unlock();
lock.unlock(); } public static Thread newThread(final Lock lock,final String threadName ) {
return new Thread(new Runnable() { @Override
public void run() {
System.out.println(threadName+"正在获取锁!");
lock.lock();
}
},threadName); } }

注意类的继承细节:

abstract static class Sync extends AbstractQueuedSynchronizer 
static final class NonfairSync extends Sync 

此时细节:

三个线程lock-1,lock-2,lock-3正在队列中等待获取锁。

接下来查看一下lock-1如何存储到等待队列中的:

最新文章

  1. 20145315&20145307《信息安全系统设计基础》实验五
  2. 对char类型的理解以及对补码的理解分析
  3. .net4.0注册到IIS ,重新注册IIS ,iis注册
  4. shell script 学习笔记-----if,for,while,case语句
  5. Transform-style和Perspective属性
  6. HDU 4718 The LCIS on the Tree(树链剖分)
  7. SparseArray,dip & px
  8. asp.net 创建文字特效
  9. 通过jquery获取后台传过来的值进行全选
  10. linux查看网卡吞吐量和网卡流量用自带命令,iptraf查看。
  11. 站点系统压力測试Jmeter+Badboy
  12. 单例模式(Singleton)看了就懂
  13. 钉钉开发获取APPKEY, APPSECRET, CorpId和SSOSecret
  14. mybatis批量更新报错badsql
  15. VMWare14 安装Mac OS系统(图解)
  16. Android 的 ListView 的CheckBox标题栏显示文本之后显示单选框
  17. 获取INET4与INET6的信息
  18. 25个iptables常用示例
  19. Tensorflow一些常用基本概念与函数(三)
  20. Oracle 热备份

热门文章

  1. Spring之Bean的作用域与生命周期
  2. 关于MVC的感悟
  3. C# if---else---练习题整理
  4. oracle sql优化的几种方法
  5. tortoisegit安装
  6. 初学HTML-6
  7. 自定义jq插件,鼠标悬浮展示图片或者视频放大图,可自定义展示内容
  8. 前端打包文件在 nginx 上 403 的解决办法
  9. 前端面试题整理——javaScript部分
  10. VXLAN技术在数据中心的应用