加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

Java高并发编程入门篇:AQS

发布时间:2021-05-22 04:38:31 所属栏目:编程 来源:互联网
导读:曾经有一道较量较量经典的口试题你可以或许说说java的并发包下面有哪些常见的类?大大都人应该都可以说出 CountDownLatch、CyclicBarrier、Sempahore多线程并发三大利

曾经有一道较量较量经典的口试题“你可以或许说说java的并发包下面有哪些常见的类?”大大都人应该都可以说出 CountDownLatch、CyclicBarrier、Sempahore多线程并发三大利器。这三大利器都是通过AbstractQueuedSynchronizer抽象类(下面简写AQS)来实现的,以是进修三大利器之前我们有须要先来进修下AQS。

AQS是一种提供了原子式打点同步状态、阻塞和叫醒线程成果以及行列模子的简朴框架”

AQS布局

说到同步我们怎样来担保同步?各人第一印象必定是加锁了,说到锁的话各人必定起首会想到的是Synchronized。Synchronized各人应该根基上城市行使,加锁和开释锁都是jvm 来帮我们实现的,我们只必要简朴的加个 Synchronized要害字就可以了。用起来超等利便。可是有没有一种环境我们配置一个锁的超时时刻Synchronized就有点实现不了,这时辰我们就可以用ReentrantLock来实现,ReentrantLock是通过aqs来实现的,本日我们就通过ReentrantLock来进修一下aqs。

CAS && 公正锁和非公正锁

AQS内里用到了大量的CAS进修AQS之前我们照旧有须要简朴的先相识下CAS、公正锁和非公正锁。

CAS

CAS 全称是 compare and swap,是一种用于在多线程情形下实现同步成果的机制。CAS 操纵包括三个操纵数 :内存位置、预期数值和新值。CAS 的实现逻辑是将内存位置处的数值与预期数值对较量,若相称,则将内存位置处的值替代为新值。若不相称,则不做任何操纵,这个操纵是个原子性操纵,java内里的AtomicInteger等类都是通过cas来实现的。

公正锁和非公正锁

公正锁:多个线程凭证申请锁的次序去得到锁,线程会直接进入行列去列队,行列中第一个才气获获得锁。利益:守候锁的线程不会饿死,每个线程都可以获取到锁。弱点:整体吞吐服从相对非公正锁要低,守候行列中除第一个线程以外的全部线程城市阻塞,CPU叫醒阻塞线程的开销比非公正锁大。

非公正锁:多个线程去获取锁的时辰,会直接去实行获取,获取不到,再去进入守候行列,假如能获取到,就直接获取到锁。利益:可以镌汰CPU叫醒线程的开销,整体的吞吐服从会高点,CPU也不必叫醒全部线程,会镌汰唤起线程的数目。弱点:处于守候行列中的线程也许会饿死,可能等好久才会得到锁。笔墨有点拗口,我们来个现实的例子声名下。好比我们去食堂就餐的时辰都要列队,各人都凭证先来后到的次序列队打饭,这就是公正锁。假如比及你筹备拿盘子打饭的时辰 直接蹦出了一个五大三粗的胖子插队到你前面,你看打不赢他只能忍气吞声让他插队,等胖子打完饭了又来个小个子也来插你队,这时辰你没法忍了,直接大吼一声让他滚,这个 小个子只能屁颠屁颠到队尾去列队了这就长短公正锁。我们先来看看AQS有哪些属性

// 头节点 

private transient volatile Node head; 

 

// 阻塞的尾节点,每个新的节点进来,都插入到最后,也就形成了一个链表 

private transient volatile Node tail; 

 

// 这个是最重要的,代表当前锁的状态,0代表没有被占用,大于 0 代表有线程持有当前锁 

// 这个值可以大于 1,是由于锁可以重入,每次重入都加上 1 

private volatile int state; 

 

// 代表当前持有独有锁的线程,举个最重要的行使例子,由于锁可以重入 

// reentrantLock.lock()可以嵌套挪用多次,以是每次用这个来判定当前列程是否已经拥有了锁 

// if (currentThread == getExclusiveOwnerThread()) {state++} 

private transient Thread exclusiveOwnerThread; //担任自AbstractOwnableSynchronizer 

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读