当前位置: 首页 > news >正文

网站仿做广州网络推广定制

网站仿做,广州网络推广定制,手机好看网站模板,2018年做网站赚钱目录 AQS简单入门为什么说AQS是JUC包下的重要基石AQS能干嘛?实际实现原理AQS自身成员变量Node内部类的成员变量源码解读总结 AQS简单入门 AQS是抽象的队列同步器,是用来实现锁或者其它同步器组件的公共基础部分的抽象实现,是重量级基础框架及…

在这里插入图片描述

目录

  • AQS简单入门
    • 为什么说AQS是JUC包下的重要基石
    • AQS能干嘛?
    • 实际实现原理
    • AQS自身成员变量
    • Node内部类的成员变量
    • 源码解读总结

AQS简单入门

AQS是抽象的队列同步器,是用来实现锁或者其它同步器组件的公共基础部分的抽象实现,是重量级基础框架及整个JUC体系的基石,主要用于解决锁分配给"谁"的问题

整体就是一个抽象的FIFO队列来完成资源获取线程的排队工作,并通过一个int类变量表示持有锁的状态
在这里插入图片描述

为什么说AQS是JUC包下的重要基石

和AQS有关的类:

  • ReentrantLock
  • CountDownLatch
  • ReentrantReadWriteLock
  • Semaphore

  • 在这里插入图片描述
    都继承了AQS类

我们使用锁可能只是简单的lock和unlock,但是实际底层锁的实际逻辑,还是AQS来去执行的

AQS能干嘛?

有堵塞需要排队,实现排队的必需队列等候机制管理

如果共享资源被占用,就需要一定的阻塞等待唤醒机制来保证锁分配。这个机制主要用的是CLH队列的变体实现的,将暂时获取不到锁的线程加入到队列中,这个队列就是AQS同步队列的抽象表现。它将要请求共享资源的线程及自身的等待状态封装成队列的结点对象(Node),通过CAS、自旋以及LockSuppor.park()的方式,维护state变量的状态,使并发达到同步的效果。
在这里插入图片描述

实际实现原理

AQS使用一个volatile的int类型的state成员变量来表示同步状态,通过内置的FIFO队列来完成资源获取的排队工作,将每条要去抢占资源的线程封装成一个Node节点来实现锁的分配,通过CAS完成对State值的修改。

AQS自身成员变量

在这里插入图片描述

下图就是模拟AQS工作的一个流程图
在这里插入图片描述
head:头指针,头部出队
tail:尾指针,尾部入队
state:同步状态,判断是否阻塞

Node内部类的成员变量

在这里插入图片描述

由于我本地装的是jdk17,AQS与jdk8的源码有不一致情况,所以直接抠图给大家来看看Node的一些内部成员变量
在这里插入图片描述

源码解读总结

以ReentrantLock非公平锁为案例去进行lock和unlock的debug源码解读(jdk8情况下)

整个ReentrantLock加锁过程,分为三个阶段

一、尝试加锁
tryAcquire 方法,尝试获取锁,以下几种情况,会导致获取锁失败:
1、锁已经被其他线程续取;
2、锁没有被其他线程获取,但当前线程需要排队:
3、cas 失败(可能过程中已经有其他线程拿到锁了)
锁为自由状态(c==0),并不能说明可以立刻执行cas 获取锁,因为可能在当前线程获取锁之前,已经有其他线程在排队了,必须道循先来后到原则获取锁。所以还要调用hasQueuedPredecessors方法,查看自己是否需要排队

二、加锁失败,线程进入队列(这部分逻辑,是尝试获取锁失败的情况下,当前线程(尝试获取锁的)封装成 Node 对象,加入到aqs队列中的处理逻辑)
将当前线程封装成 Node对象,并加入排队队列中,根据排队队列是否执行过初始化,执行不同处理逻辑。
1、如果排队队列不为空,即之前已经初始化过了,此时只需将 新的 node加入排队队列未尾即可。
2、如果排队队列为空,需执行队列初始化。enq 会初始化一个 空的 Node,作为排队队列 的head,然后将需要排队的线程,作为head 的 next 节点插入。

三、线程入队列后,进入堵塞状态
1、首先判断 node 的前辈节点,是不是 head,如果是,说明它是下一个可以获得锁的线程,则调用一次tryAcquire,尝试获取锁,若获取到,则将链表关系重新维护下(node设置为 head,之前的 head从链表移出),然后返回。
2、如果 node 的前辈节点不是 head,或获取锁失败再判断其前辈节点的 waitState,是不是SIGNAL,如果是,则当前线程调用 park,进入阻塞状态,如不是:
1)==0,则设置为 SIGNAL;
2)>0(==1),则表示前辈节点已经被取消了,将取消的节点,从队列移出,重新维护下排队链表关系

然后再次进入 for 循环,上面的逻辑重新执行一遍,

就先说到这 \color{#008B8B}{ 就先说到这} 就先说到这
在下 A p o l l o \color{#008B8B}{在下Apollo} 在下Apollo
一个爱分享 J a v a 、生活的小人物, \color{#008B8B}{一个爱分享Java、生活的小人物,} 一个爱分享Java、生活的小人物,
咱们来日方长,有缘江湖再见,告辞! \color{#008B8B}{咱们来日方长,有缘江湖再见,告辞!} 咱们来日方长,有缘江湖再见,告辞!

在这里插入图片描述

http://www.ds6.com.cn/news/54171.html

相关文章:

  • 南昌市有帮做网站的吗沈阳网站推广优化
  • 黄骅市做网站品牌设计公司排名前十强
  • 长春哪里做网站好营销方案推广
  • 公司网站建设亚运村亚洲卫星电视网参数表
  • 乌鲁木齐房地产网站建设以图搜图百度识图网页版
  • 网站建设公司 南京百度新闻官网首页
  • 杨凌做网站百度官方首页
  • 网站跳转如何做北京优化网站方法
  • 红酒手机网站模板seo百科大全
  • 高端品牌网站建设需要注意什么企业网站的在线推广方法有
  • 今日头条做免费网站全国疫情高峰感染进度查询
  • 手机网站 排版微商引流一般用什么软件
  • php 做网站seo教程下载
  • 网站搬家 备案龙岗网站建设公司
  • 成都营销策划公司旺道网站排名优化
  • 网站备案 深圳济南seo优化外包服务公司
  • 模板网站外贸建站生哥seo博客
  • 江西手机网站建设百度识图网页版入口
  • 重庆璧山网站制作报价seo是哪个英文的缩写
  • 石桥铺做网站seo上排名
  • 网页设计与网站建设考试答案巨量引擎app
  • 新建网站怎么做seo搜索引擎优化是
  • 淄博那里有做网站的软文推广做的比较好的推广平台
  • 权威的大良网站建设广州seo软件
  • b2c外贸网站开发热狗seo顾问
  • 深圳网上创建公司重庆百度seo排名优化软件
  • 东莞免费企业网站模板推广电商网站对比
  • 跟我一起做网站pdf电驴2022今日最新军事新闻
  • 网站后台登陆密码忘记了免费发布广告
  • 电脑怎么创建网站吗百度百科官网登录