Java多线程/AQS源码

这篇具有很好参考价值的文章主要介绍了Java多线程/AQS源码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概念

持锁模式-资源占用模式:
 你是想要群体面试,还是单独面试啊
 独占和共享
获锁方式:
 是不是要把手机关机啊,赶不赶时间是不是必须要在某个时间内面试完,是否公平啊
 不响应线程中断;响应线程中断;定时获取锁;公平获取;非公平获取
同步状态-锁状态;
 操作系统,互斥锁,信号量
 Boolean、int
同步队列、条件队列:
 别人在面试时你是不是需要等待啊。还没有准备好是不是需要准备好了再面试啊
 通过引用构成队列;某些条件没有满足而进入条件队列,某些条件满足了而唤醒某个条件队列中的线程
等待状态:
 等待面试的过程中,避免自己睡过头了,叫前一个人面试完了叫一下我
 等待状态自己别人都可以修改:waitStatus=0(默认),CANCELLED,SIGNAL,CONDITION,PROPAGATE

定时获取锁的分类:
 绝对时间-截止时间
 相对时间-自旋,焦急的等待,自旋时间是一个门限值,为了快速响应;超时时间>自旋时间,就将线程挂起一段时间;超时时间<=自旋时间,继续在while循环中执行
 相对时间-不自旋

AQS独占模式/不响应线程中断获取锁-流程

AQS我与资源/外界与我

  1. 一来就尝试获取锁
  2. 获取锁失败,说自己要一个单间就去同步队列中排队
  3. 进入同步队列之后还是先尝试获取锁
  4. 获取锁失败,是不是应该将自己挂起,挂起之前避免自己睡过头了,修改前面结点的等待状态,叫他回来的时候叫醒我
  5. 睡觉去了
  6. 醒来之后判断有没有过中断,有中断也只是记录下来
  7. 作为头结点尝试获取锁成功之后
  8. 进入房间办事
  9. 办完事情准备出门,尝试释放锁并叫醒下一个人
  10. 出门之后,有过中断则自己中断自己

AQS共享模式/不响应线程中断获取锁-流程

获取锁
 锁状态>0:将自己设置为head结点,并唤醒直接后继是共享模式的结点,提示将来的后继结点
 锁状态=0:当前结点获取锁成功,但后继结点不能再获取了
 锁状态<0:当前结点获取锁失败

  1. 一来就尝试获取锁
  2. 获取锁失败(锁状态<0),说自己要一个多人间就去同步队列中排队
  3. 进入同步队列之后还是先尝试获取锁
  4. 获取锁失败,是不是应该将自己挂起,挂起之前避免自己睡过头了,修改前面结点的等待状态,叫他回来的时候叫醒我
  5. 睡觉去了
  6. 醒来之后判断有没有过中断,有中断也只是记录下来
  7. 作为头结点尝试获取锁成功之后,唤醒直接后继是共享模式的结点,提示将来的后继结点
  8. 进入房间办事
  9. 办完事情准备出门,尝试释放锁并叫醒下一个人,如果没有人也会设置等待状态为PROPAGATE

AQS独占模式和共享模式对比

获取锁:
 独占模式:tryAcquire();返回boolean类型的值
 共享模式:tryAcquireShared(arg);返回int类型锁状态<0,=0,>0;并根据锁状态有不同的后续操作
释放锁:
 独占模式:tryRelease();尝试释放锁并叫醒下一个人
 共享模式:tryReleaseShared(arg);尝试释放锁并叫醒下一个人,如果没有人也会设置等待状态为PROPAGATE文章来源地址https://www.toymoban.com/news/detail-552221.html

到了这里,关于Java多线程/AQS源码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java/Python/Go不同开发语言在进程、线程和协程的设计差异

    在多线程项目开发时,最常用、最常遇到的问题是 1,线程、协程安全 2,线程、协程间的通信和控制 本文主要探讨不同开发语言go、java、python在进程、线程和协程上的设计和开发方式的异同。 进程 进程是 操作系统进行资源分配的基本单位,每个进程都有自己的独立内存空

    2024年01月23日
    浏览(50)
  • Java语言开发的AI智慧导诊系统源码springboot+redis 3D互联网智导诊系统源码

    Java 语言开发的AI智慧导诊系统源码 springboot+redis 3D 互联网智导诊系统源码 智慧导诊解决盲目就诊问题,减轻分诊工作压力。降低挂错号比例,优化就诊流程,有效提高线上线下医疗机构接诊效率。可通过人体画像选择症状部位,了解对应病症信息和推荐就医科室。 智慧导诊

    2024年04月23日
    浏览(48)
  • 【Java 】从源码全面解析Java 线程池

    线程池技术在互联网技术使用如此广泛,几乎所有的后端技术面试官都要在线程池技术的使用和原理方面对小伙伴们进行 360° 的刁难。 作为一个在互联网公司面一次拿一次 Offer 的面霸,打败了无数竞争对手,每次都只能看到无数落寞的身影失望的离开,略感愧疚(请允许我

    2024年02月03日
    浏览(47)
  • 【后端面经-Java】AQS详解

    目录 1. AQS是什么? 2. AQS核心思想 2.1 基本框架 2.1.1 资源state 2.1.2 CLH双向队列 2.2 AQS模板 3. 源码分析 3.1 acquire(int) 3.1.1 tryAcquire(int) 3.1.2 addWaiter(Node.EXCLUSIVE) 3.1.3 acquireQueued(Node node, int arg) 3.2 release(int) 3.2.1 tryRelease(int) 3.2.2 unparkSuccessor(h) 3.3 acquireShared(int)和releaseShared(int) 3.3.1 acq

    2024年02月11日
    浏览(54)
  • Java知识学习13(AQS详解)

    1、AQS介绍? AQS 的全称为 AbstractQueuedSynchronizer ,翻译过来的意思就是 抽象队列同步器 。这个类在 java.util.concurrent.locks 包下面。 AQS 就是一个抽象类,主要 用来构建锁和同步器 。 AQS 为构建锁和同步器提供了一些通用功能的实现,因此,使用 AQS 能简单且高效地构造出应用广

    2024年02月13日
    浏览(39)
  • Java中AQS的原理与实现

    1:什么是AQS? 2:AQS都有那些用途? 3:我们如何使用AQS 4:AQS的实现原理 5:对AQS的设计与实现的一些思考 ​随着计算机的算力越来越强大,各种各样的并行编程模型也随即踊跃而来,但当我们要在并行计算中使用共享资源的时候,就需要利用一种手段控制对共享资源的访问

    2024年02月13日
    浏览(42)
  • 聊一聊Java抽象同步队列AQS

    AQS是锁的底层支持 由该图可以看到,AQS是一个FIFO的双向队列,其内部通过节点head和tail记录队首和队尾元素,队列元素的类型为Node。其中Node中的thread变量用来存放进入AQS队列里面的线程;Node节点内部的SHARED用来标记该线程是获取共享资源时被阻塞挂起后放入AQS队列的,EX

    2024年02月16日
    浏览(49)
  • Java CAS和AQS的实现原理

    CAS(Compare And Swap)是一种并发控制机制,用于解决多线程并发访问共享资源时的数据一致性问题。 在Java中,CAS操作通常使用Atomic类来实现。例如,可以使用java.util.concurrent.atomic.AtomicInteger类来实现对整数类型的原子操作。Atomic类提供了一系列的原子操作方法,例如getAndAdd、

    2024年02月06日
    浏览(55)
  • java并发编程 AbstractQueuedSynchronizer(AQS)详解一

    AQS在类的注释上说的已经很明白,提供一个框架,用于实现依赖先进先出(FIFO)等待队列的阻塞锁和相关同步器(信号量、事件等)。此类被设计做为大多数类型的同步器的一个有用的基础类,这些同步器依赖于单个原子int值(state字段)来表示状态。 java 并发编程系列文章

    2024年02月10日
    浏览(45)
  • Java——并发编程(CAS、Lock和AQS)

    答: Lock 接口比同步方法和同步块提供了 更具扩展性的锁操作 。他们允许更灵活的结构,可以具有完全不同的性质,并且可以支持多个相关类的条件对象。 可以使锁更公平; 可以使线程在等待锁的时候响应中断; 可以让线程尝试获取锁,并在无法获取锁的时候立即返回或

    2024年02月06日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包