尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

AQS

AQS
📅 发布时间:2026/6/19 16:47:38

管程

一般要实现多线程同步有两种解决方案,分别是信号量和管程原语,信号量通过PV操作可以很方便的实现线程间的互斥操作,如果拿到信号量的许可后才能执行线程处理,但是信号量使用有个弊端就是在业务代码中有大量的PV方法要编写,如果在某个地方处理了P但是没有使用V进行释放,那么其他线程就会阻塞无法执行下去。并且信号量是最底层的原语,只能实现计数PV操作。
而管程的话经过高层模块的抽象,互斥、条件等待、共享数据都封装在了一起,线程只能通过管程模块来实现并发操作,使得线程使用更安全高效。
管程的经典实现模型MESA模型如下图所示
image
它分为以下几个模块:

  • 共享变量: 用于标识锁是空闲状态还是被占用的状态
  • 条件变量:用于标识条件是否满足,如果满足唤醒线程继续执行。
  • 方法: 管程中封装的方法,例如加锁,解锁这种。
  • 条件等待队列: 当线程不满足条件挂起时,会休眠并将线程存储到等待队列中。
  • 入口等待队列: 当多个线程竞争同一把锁会只有一个线程拿到锁,其他未拿到锁的线程会进入入库等待队列中。
    MESA的执行流程和我们之前的使用ReentrantLock实现的消费者生产者的例子一样,首先主线程执行方法会尝试获取锁,如果锁未获取到则会进入等待队列中,等待线程执行完成后从等待队列中获取一个线程继续执行。之后如果线程拿到锁之后会修改共享变量状态为已占用状态,避免其他线程再次获取到锁。之后这两个条件变量就像我们创建的providerCondition和consumerCondition的Condition一样,执行await()方法线程就会阻塞并添加到等待队列中,执行signalAll()方法就会从条件队列中唤醒线程继续执行。当线程执行完成后会修改共享变量为未占用。方法A和方法B就像ReentrantLock的管程方法unlock和lock。
    这些模块的实现Java内部也封装好了:
  • 共享变量可以使用CAS保证原子性
  • 等待队列可以使用CLH队列
  • object.notify和wait方法只能唤醒和锁关联的随机变量,这是不符合要求的,我们的要求是从队列中获取一个线程进行唤醒,使用LockSupport的park和unpark可以唤醒或等待指定线程。
虽然道路是曲折的,但前途是光明的。

相关新闻

  • 一、CPU的功能和基本结构
  • 一个简单美观的文件时间修改器
  • 暗黑类游戏属性系统程序设计思路3.0

最新新闻

  • ARM9微控制器LPC32x0系列:低功耗、高集成度与VFP协处理器的嵌入式设计实践
  • 洛阳市奢侈品手表包包回收价格差距高达15%:实测对比告诉你哪家店报价最实在 - 谊识预商务
  • 14000张高清驾驶员行为数据集:YOLO危险驾驶识别实战基线
  • 濮阳市闲置爱马仕、劳力士变现指南:奢侈品手表包包回收门店实地测评 - 谊识预商贸
  • 大连市奢侈品手表包包回收价格差距高达15%:实测对比告诉你哪家店报价最实在 - 谊识预商贸
  • 曲靖市闲置手表包包奢侈品变现,整理了5家靠谱回收店联系方式 - 谊识预商务

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号