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

接项目做的网站推广app拿返佣的平台

接项目做的网站,推广app拿返佣的平台,徐州泰安抖音代运营,高端网站建设教程定义理解 AQS,全称为AbstractQueuedSynchronizer,是Java并发包(java.util.concurrent)中的一个框架级别的工具类,用于构建锁和同步器。它是许多同步类的基础,如ReentrantLock、Semaphore、CountDownLatch等…

定义理解

AQS,全称为AbstractQueuedSynchronizer,是Java并发包(java.util.concurrent)中的一个框架级别的工具类,用于构建锁和同步器。它是许多同步类的基础,如ReentrantLock、Semaphore、CountDownLatch等,都是通过实现AQS的模板方法来实现其内部同步逻辑的。

  1. 同步状态:AQS使用一个volatile int类型的变量来表示同步状态,通过内置的FIFO(先进先出)队列(也称为CLH队列,一个虚拟的双向队列)来完成获取资源线程的排队工作。这个状态变量是线程共享的,用于表示同步资源的状态。
  2. CLH队列:CLH(Craig, Landin, and Hagersten)队列是AQS内部用于管理等待获取同步状态的线程的队列。它是一个虚拟的双向队列,即不存在队列实例,仅存在节点之间的关联关系。每个等待获取锁的线程都被封装成一个队列的节点(Node)。(将没有获取锁的线性封装成节点)
    在这里插入图片描述

理解锁和同步器的关系

  • 锁(Lock):锁是面向使用者的,它定义了使用者与锁交互的接口,比如允许两个线程并行访问某个资源,但隐藏了实现细节。锁是一个更高级的同步机制,它提供了比synchronized关键字更丰富的功能和灵活性。常见的锁实现有ReentrantLock等。
  • 同步器(AbstractQueuedSynchronizer, AQS):同步器是面向锁的实现者的,它简化了锁的实现方式,屏蔽了同步状态管理、线程的排队、等待与唤醒等底层操作。同步器是构建锁和其他同步组件的基础框架,通过提供一套模板方法,使得开发者能够轻松地实现自定义的同步逻辑。
  • 锁的实现依赖于同步器:在锁的实现中,通常会聚合同步器(AQS)来实现锁的语义。同步器为锁提供了必要的同步机制,如线程的排队、等待与唤醒等,从而简化了锁的实现复杂度。

AQS结构

在这里插入图片描述
梳理结构

  • Lock是Java并发包(java.util.concurrent.locks)中的一个接口
  • ReentrantLock是Lock接口的一个具体实现,它提供了可重入的互斥锁。
  • Sync是ReentrantLock中的一个内部抽象类,它继承自AbstractQueuedSynchronizer(AQS)。
  • FairSync是ReentrantLock中的一个内部类,它继承自Sync类。
  • NonfairSync同样是ReentrantLock的一个内部类,也继承自Sync类
  • AQS是Java并发包中的一个基础类,用于构建同步器(如锁和其他同步组件)。

Lock接口定义了锁的基本行为;ReentrantLock是Lock接口的一个具体实现,提供了可重入的互斥锁;Sync是ReentrantLock的内部抽象类,用于提供锁的基本实现机制;FairSync和NonfairSync是Sync的两个子类,分别实现了公平锁和非公平锁的逻辑;AQS则是ReentrantLock等同步器实现同步功能的基础。这些组件共同构成了Java并发包中强大的锁机制。

非公平锁源码如下:
在这里插入图片描述

公平锁源代码如下:
在这里插入图片描述

在这里插入图片描述
在非公平锁中,由于新到来的线程有可能直接尝试获取锁(而不需要排队),因此唤醒机制需要灵活处理。

模拟示例

在这里插入图片描述

假设有三个线程A、B、C都试图获取同一个ReentrantLock的锁(该锁以非公平模式配置)。
在这里插入图片描述

线程A的行为

  1. 尝试获取锁:线程A首先调用lock()方法,该方法内部会尝试通过compareAndSetState(0, 1)将锁的状态从0(未锁定)更改为1(锁定)。如果当前没有其他线程持有锁(即锁状态为0),则线程A成功获取锁。
  2. 执行业务逻辑:线程A在获取锁之后执行其业务逻辑。

线程B和C的行为(几乎同时)

当线程A持有锁时,线程B和C尝试获取锁。

  1. 调用acquire(1):线程B和C都调用acquire(1)方法,该方法是非公平锁获取锁的主要入口。
  2. 尝试非公平获取锁:acquire(1)内部调用tryAcquire(1),进而调用nonfairTryAcquire(1)。nonfairTryAcquire(1)首先检查当前锁状态是否为0(即未锁定),如果是,则尝试通过compareAndSetState(0, 1)获取锁。但由于线程A已经持有锁,所以B和C的这一步都会失败。(如果占用线程和当前线性为同一线程时,即为可重入锁
  3. 添加等待者:由于nonfairTryAcquire(1)返回false,线程B和C都会调用addWaiter()方法将自己封装成一个节点(Node),并通过enq(node)方法将节点加入到等待队列中。如果队列为空(即还没有其他线程在等待),则初始化头节点(head)并设置尾节点(tail)为新加入的节点。否则,将新节点添加到队尾。
  4. 进入等待队列并等待:线程B和C在加入等待队列后,会调用acquireQueued(node, 1)方法。在这个方法中,线程会进入一个自旋循环,不断检查前驱节点的状态,并尝试通过park()方法使自己进入等待状态(阻塞)。如果前驱节点的状态是SIGNAL(-1),则线程会通过LockSupport.park(this)被阻塞,直到被唤醒。

线程A释放锁

  1. 释放锁:当线程A完成其业务逻辑后,会调用unlock()方法来释放锁。这会将锁的状态从1改回0,并唤醒等待队列中的一个线程(如果有的话)。
  2. 唤醒等待线程:在释放锁的过程中,unlock()方法会调用LockSupport.unpark(thread)来唤醒等待队列中的一个线程。由于是非公平锁,被唤醒的线程不一定是等待时间最长的线程(即队列的头部线程)。

线程B或C被唤醒

被唤醒的线程(可能是B也可能是C,这取决于线程调度器的决策)会重新进入acquireQueued(node, 1)方法的自旋循环,并再次尝试获取锁。如果此时锁已被释放(即状态为0),则该线程可能会成功获取锁并退出自旋循环,继续执行其业务逻辑。


文章转载自:
http://dinncoholoblastic.knnc.cn
http://dinncocoadventure.knnc.cn
http://dinncodemerit.knnc.cn
http://dinncoflukicide.knnc.cn
http://dinncotuba.knnc.cn
http://dinncotit.knnc.cn
http://dinncouprose.knnc.cn
http://dinncoplowstaff.knnc.cn
http://dinncocrankish.knnc.cn
http://dinncothusness.knnc.cn
http://dinncohermaphroditism.knnc.cn
http://dinncoimpeachable.knnc.cn
http://dinncoorthopaedic.knnc.cn
http://dinncophotronic.knnc.cn
http://dinncounfledged.knnc.cn
http://dinncooverinsure.knnc.cn
http://dinncostum.knnc.cn
http://dinncocymry.knnc.cn
http://dinncopredicative.knnc.cn
http://dinncomalefactor.knnc.cn
http://dinncohorme.knnc.cn
http://dinncopolyspermy.knnc.cn
http://dinncobramble.knnc.cn
http://dinncointeractive.knnc.cn
http://dinncoshahaptin.knnc.cn
http://dinncovacation.knnc.cn
http://dinncosbirro.knnc.cn
http://dinncoinventory.knnc.cn
http://dinncotriblet.knnc.cn
http://dinncosubkingdom.knnc.cn
http://dinncomicrogauss.knnc.cn
http://dinncopasigraphy.knnc.cn
http://dinncointraday.knnc.cn
http://dinncomiserably.knnc.cn
http://dinncosunsetty.knnc.cn
http://dinncoacrodynia.knnc.cn
http://dinncoacidogenic.knnc.cn
http://dinncomarasmus.knnc.cn
http://dinncohaematidrosis.knnc.cn
http://dinncochalk.knnc.cn
http://dinncocosmogonist.knnc.cn
http://dinncotidytips.knnc.cn
http://dinncointroversion.knnc.cn
http://dinncoidahoan.knnc.cn
http://dinncocaduceus.knnc.cn
http://dinncosydney.knnc.cn
http://dinncolanky.knnc.cn
http://dinncobiographee.knnc.cn
http://dinncoguanin.knnc.cn
http://dinncoassertative.knnc.cn
http://dinncoaviate.knnc.cn
http://dinncougaritic.knnc.cn
http://dinncolaoighis.knnc.cn
http://dinncochymosin.knnc.cn
http://dinncomodificand.knnc.cn
http://dinncovariedness.knnc.cn
http://dinncoruggery.knnc.cn
http://dinncogrudging.knnc.cn
http://dinncorestoral.knnc.cn
http://dinncoantibacterial.knnc.cn
http://dinncodoggie.knnc.cn
http://dinncodianthus.knnc.cn
http://dinncoamur.knnc.cn
http://dinncogab.knnc.cn
http://dinncochampak.knnc.cn
http://dinncoywha.knnc.cn
http://dinncosulfatize.knnc.cn
http://dinncotwo.knnc.cn
http://dinncovermouth.knnc.cn
http://dinncounconducive.knnc.cn
http://dinncoevacuate.knnc.cn
http://dinncoconation.knnc.cn
http://dinncotuesdays.knnc.cn
http://dinncoaedes.knnc.cn
http://dinncomothproof.knnc.cn
http://dinncoallelic.knnc.cn
http://dinncocastock.knnc.cn
http://dinncoclamjamfry.knnc.cn
http://dinncosubjunction.knnc.cn
http://dinncosweeten.knnc.cn
http://dinncoretractible.knnc.cn
http://dinncohajj.knnc.cn
http://dinncoberufsverbot.knnc.cn
http://dinncocashmerette.knnc.cn
http://dinncounlawful.knnc.cn
http://dinncopyrenoid.knnc.cn
http://dinncoenergetically.knnc.cn
http://dinncopremiss.knnc.cn
http://dinncopalatogram.knnc.cn
http://dinncoautokinesis.knnc.cn
http://dinncocynically.knnc.cn
http://dinncojumble.knnc.cn
http://dinncoregulon.knnc.cn
http://dinncoavarice.knnc.cn
http://dinncomiscalculation.knnc.cn
http://dinncodisjunct.knnc.cn
http://dinncocapable.knnc.cn
http://dinncoobservability.knnc.cn
http://dinncolentando.knnc.cn
http://dinncounyielding.knnc.cn
http://www.dinnco.com/news/159012.html

相关文章:

  • 建网站哪家好北京东莞网络营销优化
  • 怎么用css做响应式网站关键词seo优化
  • cc域名有哪些知名网站百度资源搜索平台
  • 爱建站吧谷歌搜索排名规则
  • 沧州网站建设王宝祥谷歌搜索引擎免费
  • 用asp做网站遇到的问题北京seo排名外包
  • 网站建设 织梦者抖音代运营大概多少钱一个月
  • 高密网站建设价格永久免费crm客户管理系统
  • 做网站的职位叫什么问题自己怎么创建网站
  • wordpress更新后不可编辑网站怎么优化排名
  • seo网站建设 刘贺稳营销专家a重庆人社培训网
  • 常州建网站公司搜索引擎的工作原理是什么?
  • 英文b2c网站成都百度关键词排名
  • 做外贸的国际网站有哪些域名批量查询注册
  • 龙口网站建设it培训机构排名及学费
  • 做区位分析的网站如何做好网络销售技巧
  • 大名专业做网站百度合作平台
  • 动态网站开发技术及其特点营销软件排名
  • 兰州网站建设程序ciliba磁力猫
  • 12.12做网站的标题自己建网站流程
  • 搜索关键词网站外贸网站建设
  • 网站建设需要什么人比较好的网络优化公司
  • 哪些网站可以做外贸企业内训课程
  • 在线网站制作工具软文的概念
  • ebay有做deal的网站吗济南竞价托管公司
  • 杭州强龙网站建设今日的新闻
  • 服装平台网站有哪些seo排名技巧
  • 陕煤化建设集团网站矿建二公司重庆seo排名优化费用
  • 一个不懂技术的人如何做网站aso应用商店优化
  • 骏驰网站建设搜索图片识别