【JUC】一篇通关JUC并发之共享模型

news2024/11/17 4:44:21

目录

  • 1. 共享带来的问题
    • 1-1. 临界区 Critical Section
    • 1-2. 竞态条件 Race Condition
    • 1-3. synchronized 解决方案

1. 共享带来的问题

1-1. 临界区 Critical Section

  • 一个程序运行多个线程本身是没有问题的
  • 问题出在多个线程访问共享资源
    • 多个线程读共享资源其实也没有问题
    • 在多个线程对共享资源读写操作时发生指令交错,就会出现问题
  • 一段代码块内如果存在对共享资源多线程读写操作,称这段代码块为临界区

例如

	static int counter = 0;
	static void increment() 
	// 临界区
	{ 
	 counter++;
	}
	static void decrement() 
	// 临界区
	{ 
	 counter--;
	}

1-2. 竞态条件 Race Condition

  • 多个线程在临界区内执行,由于代码的执行序列不同而导致结果无法预测,称之为发生了竞态条件

1-3. synchronized 解决方案

为了避免临界区的竞态条件发生,有多种手段可以达到目的。

  • 阻塞式的解决方案:synchronized,Lock
  • 非阻塞式的解决方案:原子变量

synchronized,即俗称的【对象锁】,它采用互斥的方式让同一时刻至多只有一个线程能持有【对象锁】,其它线程再想获取这个【对象锁】时就会阻塞住。这样就能保证拥有锁的线程可以安全的执行临界区内的代码,不用担心线程上下文切换

注意
虽然 java 中互斥和同步都可以采用 synchronized 关键字来完成,但它们还是有区别的:

  • 互斥是保证临界区的竞态条件发生,同一时刻只能有一个线程执行临界区代码
  • 同步是由于线程执行的先后、顺序不同、需要一个线程等待其它线程运行到某个点

语法

synchronized(对象) // 线程1, 线程2(blocked)
{
 临界区
}

案例

在这里插入图片描述

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

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

相关文章

程序员职场可能遇到的问题总结!

在职场中,你是否遇到过这样的领导或同事,他可能是自恋狂,自吹自擂自我标榜;可能是团队合作的绊脚石,对团队合作态度消极并频繁拖后腿;可能是抱怨专家,满满负能量;可能是完美主义者&a…

HTTP协议抓包工具Charles 抓包图文完整教程

Charles是在您自己的计算机上运行的Web代理(HTTP代理 / HTTP监视器),您的网络浏览器(或任何其他Internet应用程序)配置为通过Charles访问Internet,Charles可以为您记录并显示发送和接收的所有数据。 Http抓…

浅学指针(2)数组函数传值调用

系列文章目录 文章目录 系列文章目录前言1. 指针的使⽤和传址调⽤结论:实参传递给形参的时候,形参会单独创建⼀份临时空间来接收实参,对形参的修改不影响实 参。那么这个时候,就要搬出指针大哥,在main函数中将a和b的地…

bugkuctf--Crypto--抄错的字符

抄错的字符 描  述: 老师让小明抄写一段话,结果粗心的小明把部分数字抄成了字母,还因为强迫症把所有字母都换成大写。你能帮小明恢复并解开答案吗:QWIHBLGZZXJSXZNVBZW 这里其实是base64加密只是更换了字母大写,还有数字 QW…

inBuilder低代码平台新特性推荐-第十期

各位知乎的友友们,大家好~ 今天来给大家带来的是inBuilder低代码平台特性推荐系列第十期——查看变更日志 场景介绍 【销售订单列表】中添加查看变更日志按钮,可以查看列表当前行数据的历史变更记录。 运行时效果 概念 系统中有些关键业务关键数据&am…

类和对象(3)日期类的实现

日期类的实现 一,声明二,函数成员定义2.1构造函数2.2获取月份天数2.3比较运算符2.3.1等于和大于2.3.2其他 2.4计算运算符2.4.1 &&2.4.2-&&- 2.5日期-日期 一,声明 class Date { public:Date(int year 1, int month 1, int…

如何在没有备份的情况下恢复 iPhone 上已删除的短信

要在没有备份的情况下恢复 iPhone 上已删除的消息,您可以从“消息”应用程序恢复它们或使用第三方数据恢复工具。 虽然我们的 iPhone 可以做很多事情,但我在设备上最常做的事情之一就是文本。无论我是与朋友或家人联系,还是分享重要信息&…

数据结构 | 堆【图解】

数据结构 | 堆【图解】 文章目录 数据结构 | 堆【图解】堆的概念及结构堆的实现堆的初始化堆的插入【重点】堆的删除【重点】取堆顶的数据堆的数据个数堆的判空堆的销毁 全部代码 堆的概念及结构 堆(heap): 一种有特殊用途的数据结构——用来…

【办公常识_2】设置网络优先级

1、设置网络优先级 2、切换网卡 有时候需要多张网卡来回切换 (1)禁用掉一张网卡 (2)设置网卡

发现有一个会Python的男友魅力值杠杠的!!!

Python能做什么? 可以做日常任务,比如自动备份你的MP3,可以做网站,很多著名的网站像知乎、YouTube就是Python写的, 可以做网络游戏的后台,很多在线游戏的后台都是Python开发的。 上面说的这些本人并没有实…

hdlbits系列verilog解答(Exams/m2014 q4e)-46

文章目录 一、问题描述二、verilog源码三、仿真结果 一、问题描述 实现以下电路: 二、verilog源码 module top_module (input in1,input in2,output out);assign out ~(in1 | in2);endmodule三、仿真结果 转载请注明出处!

你听过斯大林病毒吗?

相信不少小伙伴看过这种红眼特效,那么你知道这个特效最早出自哪里吗? 其实这个红眼病毒最早出于俄罗斯的电脑病毒斯大林,一旦电脑感染这个病毒,屏幕上就会出现自带一个红眼特效的斯大林人像,同时不断播放苏联国歌。 …

qgis添加arcgis的FeatureServer

左侧浏览器-ArcGIS要素服务器-新建连接 http://sampleserver6.arcgisonline.com/arcgis/rest/services/ 展开-双击即可

Python潮流周刊:Twitter 的强敌 Threads 是用 Python 开发的!

🦄文章&教程 1、聊一聊 Python 和 Golang 的垃圾回收 常见的垃圾回收算法有哪些,它们的优缺点是什么?Python 的垃圾回收机制由什么组成,如何解决内存泄漏问题?Golang 的垃圾回收机制又是怎样的,如何解…

搭建Linux环境 云服务器指南

我们要学习Linux的相关知识,必须搭建Linux环境 这里有三种方式: 这篇文章我们介绍一下云服务器的购买 购买云服务器 我们以腾讯云为例, 其他的服务器厂商也是类似 云服务器或轻量级应用服务器都是可以的,我们以轻量级应用服务器为例 1.进入…

MySQL死锁了怎么办(死锁的产生及解决方案),死锁的案例,死锁的排查,死锁的解决,如何避免死锁的发生

文章目录 MySQL死锁了怎么办(死锁的产生及解决方案)?1、 死锁与产生死锁的四个必要条件1.1 什么是死锁1.2 死锁产生的4个必要条件 2、死锁案例2.1 表锁死锁2.2 行锁死锁2.3 共享锁转换为排他锁 3、死锁排查4、 如何避免死锁5、死锁的排查6、 …

AHSATA模块之AHCI HBA卡开发,结合SPEC文档和项目实际底层FW开发总结(一)

目录 一、简介二、总体架构和常用术语总结2.1 总结介绍2.2 常用术语解析 三、详细流程3.1 总结3.2 物理层详解3.3 链路层、传输层详解3.4 命令层详解 四、FW开发4.1 pcie header配置4.2 PMCAP和MSICAP配置4.3 pcie capbility配置4.4 Generic Host Control配置4.5 Port Register…

【腾讯云云上实验室】向量数据库+LangChain+LLM搭建智慧辅导系统实践

目录 一、搭建智慧辅导系统——向量数据库实践指南1.1、创建向量数据库并新建集合1.2、使用 TKE 快速部署 ChatGLM1.3、部署 LangChain PyPDFVectorDB等组件1.4、配置知识库语料1.5、基于 VectorDB LLM 的智能辅导助手 二、LLM时代的次世代引擎——向量数据库2.1、向量数据库L…

CleanMyMacX4.14.5macOS电脑系统免费清理工具

CleanMyMac X是一款专业的Mac清理软件,可智能清理mac磁盘垃圾和多余语言安装包,快速释放电脑内存,轻松管理和升级Mac上的应用。同时CleanMyMac X可以强力卸载恶意软件,修复系统漏洞,一键扫描和优化Mac系统,…

Swagger在php和java项目中的应用

Swagger在php和java项目中的应用 Swagger简介Swagger在java项目中的应用步骤常用注解 Swagger在php项目中的应用 Swagger简介 Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。 总体目标是使客户端和文件系统作为服务器以…