码迷,mamicode.com
首页 > 编程语言 > 详细

Java同步器AQS

时间:2019-10-06 09:27:54      阅读:92      评论:0      收藏:0      [点我收藏+]

标签:请求   使用   lock   style   targe   tran   自旋锁   一个   概念   

一、概念

1. AQS(AbstractQueuedSynchronizer),抽象队列式同步器,在java.util.concurrent.locks(JUC)包下,是除了Java自带的synchronized关键字之外的锁机制

2. AQS机制:如果请求的资源被其他线程锁定,将当前线程加入等待队列中

3. 在java.util.concurrent(JUC)包下,多种同步和并发类的实现基于AQS

 

二、原理

1. CLH队列:一个虚拟的双向队列,不存在队列实例,仅存在节点之间的关联关系,用双向链表实现

2. AQS将每一个线程封装成节点,加入CLH队列中等待获取锁

3. 每个线程使用CAS去修改volatile修饰的共享变量state,修改成功则获取锁成功,否则进入等待队列,然后FIFO先进先出

private volatile int state; //0表示lock,1表示unlock

4. AQS是自旋锁,即当锁被别的线程获取的时候,当前线程循环等待

 

三、AQS功能

1. 实现独占锁:只有一个线程能访问,例如ReentrantLock

2. 实现共享锁:多个线程可以同时访问,例如Semaphore

3. 实现Condition模型

 

 

参考:

https://blog.csdn.net/mulinsen77/article/details/84583716

https://cloud.tencent.com/developer/article/1449175

 

Java同步器AQS

标签:请求   使用   lock   style   targe   tran   自旋锁   一个   概念   

原文地址:https://www.cnblogs.com/june0816/p/11604216.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!