前提:在知道AQS之前,得先了解可重入锁和LockSupport
1.可重入锁
synchronized()
java p -c 类.class
因为要保证彻底释放锁
synchronized的重入的实现机理:
每个锁对象拥有一个锁计数器和一个指向持有该锁的线程的指针
+1 -1 目标对象计数器为0则没有被其他线程所持有
2.LockSupport
概念:用于创建和其他同步类的基本线程阻塞原语,是线程等待唤醒机制改良加强版
LockSupport中的park()和unpark()的作用分别是阻塞线程和解除阻塞线程
相比于synchronized和lock 不需要锁块,不需要先后顺序执行
3.AbstractQueuedSynchronizer之AQS
概念:抽象队列同步器 变量+队列
技术解释:是用来构建锁或其他同步器组件的重量级基础框架及整个JC体系的基石,通过内置的FIFO队列来完成资源获取线程的排队工作,并通过一个int类型变量表示持有锁的状态