并发编程理论基础——管程(并发编程的万能钥匙)(七)

news2024/11/19 11:16:36

什么是管程

  1. Java采用了管程技术,synchronized关键字及wait()、notify()、notifyAll()三个方法都是管程的组成部分
  2. 管程和信号量是等价的,管程和信号量之间可以互相实现
  3. 英文名:Monitor 直译为监视器
  4. 管程指的是管理共享变量以及对共享变量的操作过程,让他们支持并发

MESA模型(一个被广泛应用的模型)

  1. 还有Hasen模型、Hoare模型,MESA使用的范围最广
  2. Java 管程的实现参考的也是 MESA 模型
  3. MESA模型的主要组成:
    • 在管程模型里,共享变量和对共享变量的操作被封装起来,只有一个入库,入口旁边有一个入口等待队列。
    • 在管程模型里,条件变量也被封装,每个条件变量都对应有一个等待队列。
  4. 在并发编程领域,有两大核心问题:一个是互斥,即同一时刻只允许一个线程访问共享资源;另一个是同步,即线程之间如何通信、协作。这两大问题,管程都是能够解决的。
  5. 管程解决互斥问题
    • 将共享变量及其对共享变量的操作统一封装起来。
  6. 管程解决线程间的同步问题
    • 模拟阻塞队列的出队入队过程

wait() 的正确姿势

        对于 MESA 管程来说,有一个编程范式,就是需要在一个 while 循环里面调用 wait()。

三个模型的区别:Hasen 模型、Hoare 模型和 MESA 模型的一个核心区别就是当条件满足后,如何通知相关线程。管程要求同一时刻只允许一个线程执行,那当线程 T2 的操作使线程 T1 等待的条件满足时,T1 和 T2 究竟谁可以执行呢?

  1. Hasen 模型里面,要求 notify() 放在代码的最后,这样 T2 通知完 T1 后,T2 就结束了,然后 T1 再执行,这样就能保证同一时刻只有一个线程执行。
  2. Hoare 模型里面,T2 通知完 T1 后,T2 阻塞,T1 马上执行;等 T1 执行完,再唤醒 T2,也能保证同一时刻只有一个线程执行。但是相比 Hasen 模型,T2 多了一次阻塞唤醒操作。
  3. MESA 管程里面,T2 通知完 T1 后,T2 还是会接着执行,T1 并不立即执行,仅仅是从条件变量的等待队列进到入口等待队列里面。这样做的好处是 notify() 不用放到代码的最后,T2 也没有多余的阻塞唤醒操作。但是也有个副作用,就是当 T1 再次执行的时候,可能曾经满足的条件,现在已经不满足了,所以需要以循环方式检验条件变量。

总结

  1. Java 参考了 MESA 模型,语言内置的管程(synchronized)对 MESA 模型进行了精简。MESA 模型中,条件变量可以有多个,Java 语言内置的管程里只有一个条件变量。
  2. Java 内置的管程方案(synchronized)使用简单,synchronized 关键字修饰的代码块,在编译期会自动生成相关加锁和解锁的代码,但是仅支持一个条件变量而 Java SDK 并发包实现的管程支持多个条件变量,不过并发包里的锁,需要开发人员自己进行加锁和解锁操作。(synchronized和Lock的区别之一)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1855473.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#高级知识

注册表技术 注册表是一个庞大的数据库系统,它记录了用户安装在计算机上的软件、硬件信息和每一个程序的相互关系。注册表中存放着很多参数,直接控制整个系统的启动、硬件驱动程序的装载以及应用程序的运行Windows注册表包含Windows安装以及已安装软件和…

物联网开发系列(一)·阿里云平台产品的创建以及设备的添加

目录 1. 物联网概述 2. 消息通讯流程 3. 创建产品与设备 3.1 登陆阿里云平台 3.2 新建产品 3.3 添加设备 1. 物联网概述 物联网(Internet of Things,简称 IoT)是指通过互联网连接各种物理设备和物体,使它们能够进行数…

轻量级的文档管理系统Teedy

什么是 Teedy ? Teedy 是一个轻量级的文档管理系统,具有您可以从昂贵的大型解决方案中获得的所有功能,但仍然易于使用。 软件功能特点: 响应式用户界面光学字符识别LDAP 身份验证(新功能!)支持…

Sublime Text for Mac v4.0 【注册汉化版】代码编辑器(保姆级教程,简单易懂,轻松上手)

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、Sublime Text 安装出现“软件已损坏,无法打开。要移到废纸篓”问题,解决办法: 2、汉化补丁安装3、输入注册码4、查询使用期限 安装完成!!! 效果 一、下…

48岁前TVB力捧花旦嫁香港区议员急流勇退诞4女,跻身名媛圈。

多年来,48岁的杨张新悦(前名张燊悦)的皮肤、发质及身形都保养得宜,令人羡慕不已,日前她更公开多张性感内衣照,不输妙龄少女! 杨张新悦在照片中大晒纤腰,有网民留言:「四十…

揭开手机版淘宝死店采集器的秘密!

自从手机版淘宝死淘死店小桃采集器问世以来,它就成为了众多网友关注的焦点。这个神秘的项目,让人们在感叹科技发展的同时,也不禁好奇它究竟能带给我们怎样的惊喜。那么,这个看似神奇的项目到底是怎么回事呢?让我们一起…

力扣141A

文章目录 1. 题目链接2. 题目代码3. 题目总结4. 代码分析 1. 题目链接 Amusing Joke 2. 题目代码 #include<iostream> #include<string> using namespace std;int letterOfInt[30]; int letterAtDoorOfInt[30];int main(){string guestName;string hostName;strin…

网络分层之7层讲解

网络分层 网络分层就是将网络节点所要完成的数据的发送或转发、打包或拆包&#xff0c;控制信息的加载或拆出等工作&#xff0c;分别由不同的硬件和软件模块去完成。 一、物 理 层(Physical Layer) 要传递信息就要利用一些物理媒体&#xff0c;如双纽线、同轴电缆等&#xff…

告别繁琐!一键互换新旧文件夹名,高效批量改名神器助您轻松管理文件库

在日常工作中&#xff0c;我们经常需要对文件夹进行命名和重命名操作。然而&#xff0c;当面对大量需要互换新旧名称的文件夹时&#xff0c;传统的手动操作不仅效率低下&#xff0c;还容易出错。为了解决这一难题&#xff0c;我们特别推出了一款高效、便捷的文件夹批量改名工具…

第3章 小功能大用处-Bitmaps、HyperLogLog、GEO

1.Bitmaps 1.1数据结构模型 现代计算机用二进制&#xff08;位&#xff09;作为信息的基础单位&#xff0c;1个字节等于8位&#xff0c;例 如“big”字符串是由3个字节组成&#xff0c;但实际在计算机存储时将其用二进制表 示&#xff0c;“big”分别对应的ASCII码分别是98、10…

VMware ESXi 8.0U2c macOS Unlocker OEM BIOS Huawei (华为) FusionServer 定制版

VMware ESXi 8.0U2c macOS Unlocker & OEM BIOS Huawei (华为) FusionServer 定制版 ESXi 8.0U2 标准版&#xff0c;Dell (戴尔)、HPE (慧与)、Lenovo (联想)、Inspur (浪潮)、Cisco (思科)、Hitachi (日立)、Fujitsu (富士通)、NEC (日电)、Huawei (华为)、xFusion (超聚…

HTML(16)——边距问题

清楚默认样式 很多标签都有默认的样式&#xff0c;往往我们不需要这些样式&#xff0c;就需要清楚默认样式 写法&#xff1a; 用通配符选择器&#xff0c;选择所有标签&#xff0c;清除所有内外边距选中所有的选择器清楚 *{ margin:0; padding:0; } 盒子模型——元素溢出 作…

OpenCV颜色检测

OpenCV颜色检测 前言策略分析根据颜色检测目标对象相关链接 前言 绿幕技术是一种经典的视频编辑技术&#xff0c;可以用于将人物置于不同的背景中。例如在电影制作中&#xff0c;技术的关键在于演员不能身着特定颜色的衣服(比如绿色)&#xff0c;站在只有绿色的背景前。然后&a…

数据库原理与安全复习笔记(未完待续)

1 概念 产生与发展&#xff1a;人工管理阶段 → \to → 文件系统阶段 → \to → 数据库系统阶段。 数据库系统特点&#xff1a;数据的管理者&#xff08;DBMS&#xff09;&#xff1b;数据结构化&#xff1b;数据共享性高&#xff0c;冗余度低&#xff0c;易于扩充&#xff…

【Linux系列】tree 命令的实用指南

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

前端:Nuxt3 + Vuetify3 + Element Plus + 添加常用插件

想要开发一个网站&#xff0c;并且支持SEO搜索&#xff0c;当然离不开我们的 Nuxt &#xff0c;那通过本篇文章让我们一起了解一下。如果构建一个Nuxt项目 安装 Nuxt3&#xff0c;创建项目 安装nuxt3&#xff0c; 需要node v18.10.0&#xff0c;大家记得查看自己的node版本。…

[保姆级教程]uniapp小程序获取右上角胶囊位置信息

文章目录 导文使用uni.getMenuButtonBoundingClientRect();方法实现完整案例 隐藏默认导航栏&#xff1a;全局隐藏当前页面隐藏 导文 uniapp小程序获取右上角胶囊位置信息 使用uni.getMenuButtonBoundingClientRect();方法实现 <script>const menuButtonInfo uni.getMe…

校园设施物联网信息化改造

随着物联网技术的发展越来越成熟&#xff0c;它不断地与人们的日常生活和工作深入融合&#xff0c;推动着社会的进步。其中物联网系统集成在高校实践课程中可以应用到许多项目&#xff0c;如环境气象检测、花卉种植信息化监管、水质信息化监管、校园设施物联网信息化改造、停车…

内卷时代!程序员如何突破35岁的宿命?

大家好&#xff0c;我是码农先森。 曾经梦想仗剑走天涯&#xff0c;如今却在写字楼里安家。他乡容不下灵魂&#xff0c;家乡容不下肉体&#xff0c;还面临着35岁被毕业&#xff0c;这难道就是程序员的宿命&#xff1f;大环境我们无法改变&#xff0c;但我认为至少能改变自己。…