---synchronized 关键字---

在多线程编程中,由于代码的并发执行,导致了不同的线程在修改相同的变量会导致变量的值错误

比如 变量 c = 2,这里有线程A 和 B一起使用 c变量并对他加1,这时就会有多中情况

这里要注意的是变量c是储存在内存中的,而线程要使用变量就需要吧变量读取都寄存器中,在对他进行操作

1   A B 同时得到了c 那么,c在A中的值为2,c在B中的值也为2,那么对他进行加一,那么最终结果c的值就是3 这就产生内存可见性的问题

内存可见性:当多个线程同时对一个变量进行修改时,线程不会再第一时间获取到变量对象的数据,就会导致一些不可预测的错误

比如我要对变量 a 通过俩个线程一起对他进行10000次的加一操作

发现最终的结果不是20000,这就是内存可见性引起的错误,且这个值是随机的

2  A 先得到了c 并对他进行了修改,B再得到了A修改后得c再对他进行操作,这样c得值就是4

而这样程序就充满得不确定性,为了避免这个问题,所以我们使用synchronized关键字来给线程上锁

synchronized使用

synchronized(锁对象){

//具体的逻辑实现

}

互斥访问

对于加了synchronized的代码块会在一个线程获得锁后执行对应的逻辑,在逻辑执行完后解锁,这时起他的线程才能获取锁,否者线程就会进入阻塞等待过程中,这样就能解决内存可见性的问题

可重入锁

java中实现了可重入锁,也就是对于相同锁对象的锁可以重复进入,不需要等他解锁

比如这样还是能正常运行,最有效的锁就只有最外层的锁,实现的方式通过一个count变量,从第一个synchronized开始遇到一个{ 就加加遇到 } 就减减最终中但count==0是就是解锁的时候

死锁

在一个锁a中尝试获取锁b,再另一个线程锁b又去获取a这样形成了个循环就会出现死锁的情况

对于死锁的解决方法可以规定每把锁的索取顺序,必须要等锁1 获取了才能锁2,否者就进入阻塞等待的情况,这样就能很好的避免死锁

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

EDA --软件开发之路

之前一直在一家做数据处理的公司,从事c开发,公司业务稳定,项目有忙有闲,时而看下c,数据库,linux相关书籍,后面跳槽到了家eda公司,开始了一段eda开发之路。 eda 是 electric design …

分布式 ID 生成策略(二)

在上一篇文章,分布式 ID 生成策略(一),我们讨论了基于数据库的 ID 池策略,今天来看另一种实现,基于雪花算法的分布式 ID 生成策略。 如图所示,我们用 41 位时间戳 12 位机器 ID 10 位序列号&a…

大数据新视界 -- 大数据大厂之大数据重塑影视娱乐产业的未来(4 - 3)

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

【数据库设计】规范设计理论之范式

学习完函数依赖之后我们就可以以函数依赖的定义为依据来规范设计数据库了。范式(normal form)的意思是规范的程度,如第一范式第二范式第三范式,数字越大说明规范程度越高。让数据库满足某一范式实际上是在消除函数依赖的过程&…

VisualStudio2022配置2D图形库SFML

文章目录 1. 下载安装SFML库2. 创建C项目并配置SFML配置include目录和库目录链接SFML库配置动态链接库 3. 测试 1. 下载安装SFML库 SFML(Simple and Fast Multimedia Library)C库,适合2D游戏和图形界面,提供了以下模块&#xff1…

Python(pandas库3)

函数 随机抽样 语法: n:要抽取的行数 frac:抽取的比例,比如 frac0.5,代表抽取总体数据的50% axis:示在哪个方向上抽取数据(axis1 表示列/axis0 表示行) 案例: 输出结果都为随机抽取。 空…

MATLAB锂电概率分布模型

🎯要点 概率分布等效电路模型结合了路径相关速率能力及状态估计中滞后效应。纠正了充电状态中时间误差累积及避免开路电压中电压滞后现象。使用电流方向和电池容量相关函数描述开路电压,并使用微分方程描述电压滞后现象。模型结构基于一级相变的材料机制…

2024.10.9华为留学生笔试题解

第一题无线基站名字相似度 动态规划 考虑用动态规划解决 char1=input().strip() char2=input().strip() n,m=len(char1),len(char2) dp=[[0]*(m+1) for _ in range(n+1)] #dp[i][j]定义为以i-1为结尾的char1 和以 j-1为结尾的char2 的最短编辑距离 setA = set(wirel@com) set…

力扣21 : 合并两个有序链表

链表style 描述: 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 节点大小相同时,l1的节点在前 何解? 1,遍历两个链表,挨个比较节点大小 同时遍…

【北京迅为】《STM32MP157开发板嵌入式开发指南》-第六十七章 Trusted Firmware-A 移植

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器,既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构,主频650M、1G内存、8G存储,核心板采用工业级板对板连接器,高可靠,牢固耐…

基于海思soc的智能产品开发(音视频处理的三个方向)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 音视频处理这个需求一直都有,那我们为什么需要soc来处理音视频。或者说,用soc来处理音视频有什么好处?传统的pc…

msvcr100.dll丢失怎样修复,介绍6个简单靠谱的方法

msvcr100.dll是Microsoft Visual C 2010 Redistributable Package中的一个关键动态链接库文件。该文件包含了运行基于Visual Studio 2010编译的应用程序所必需的一系列函数和资源。具体来说,它提供了C运行时库的支持,使得许多使用Visual C库编译的应用程…

雷池社区版compose配置文件解析-mgt

在现代网络安全中,选择合适的 Web 应用防火墙至关重要。雷池(SafeLine)社区版免费切好用。为网站提供全面的保护,帮助网站抵御各种网络攻击。 compose.yml 文件是 Docker Compose 的核心文件,用于定义和管理多个 Dock…

并发编程的深入探索(3/5)

目录 1. Java线程模型 示例代码:创建线程的两种方式 2. 同步机制与锁 示例代码:synchronized的使用 显式锁(ReentrantLock) 3. Java并发工具包(java.util.concurrent) 线程池(Executor F…

gcc与mingw64版本介绍

三类编译器 GCC,全称为GNU Compiler Collection,是一个强大的编译器集合,它不仅支持C和C语言,还支持Fortran、Ada、Java等多种编程语言的编译。在GCC工具链中,gcc和g是两个核心的编译器工具。gcc是专门用于编译C语言程…

PostgreSQL使用clickhouse_fdw访问ClickHouse

Postgres postgres版本:16(测试可用)docker 安装 插件安装 clickhouse_fdw: https://github.com/ildus/clickhouse_fdw 安装命令 git clone gitgithub.com:ildus/clickhouse_fdw.git cd clickhouse_fdw mkdir build && cd build…

【高级IO】IO多路转接之epoll

epoll接口 epoll_create 创建一个epoll模型 自从linux2.6.8之后,size参数是被忽略的返回值是一个文件描述符用完之后, 必须调用close()关闭 epoll_ctl epoll_ctl用于添加、修改或删除关注的文件描述符,并设置感兴趣的事件类型(如读事件、写…

windows 11 mpksldrv.sys 导致蓝屏

#mpksldrv.sys 导致蓝屏 windows 11 在运行Twincat 3进行仿真时,就会蓝屏 尝试了各种其他的办法修改什么注册表,各种办法都尝试了没有用, 后面尝试了下面的办法竟然解决了,请参考下面链接: 链接: 两条命令可以帮助你…

如何使用的是github提供的Azure OpenAI服务

使用的是github提供的Azure OpenAI的服务gpt-4o 说明:使用的是github提供的Azure OpenAI的服务,可以无限薅羊毛。开源地址 进入: 地址 进入后点击 右上角“Get API key”按钮 点击“Get developer key” 选择Beta版本“Generate new to…

WPF+MVVM案例实战(九)- 霓虹灯字效果控件封装实现

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、运行效果2、主菜单与界面实现1、主菜单2、霓虹灯字界面实现3、字体资源获取3、控件封装1.创建自定义控件2、依赖属性实现3、封装控件使用4、运行效果4、源代码获取1、运行效果 2、主菜单与界面实…