synchronized的特性
1.互斥
对于synchronized修饰的方法及代码块不同线程想同时进行访问就会互斥。
就比如synchronized修饰代码块时,一个线程进入该代码块就会进行“加锁”。
退出代码块时会进行“解锁”。
当其他线程想要访问被加锁的代码块时,就会阻塞等待。
阻塞等待:
针对每⼀把锁, 操作系统内部都维护了⼀个等待队列. 当这个锁被某个线程占有的时候, 其他线程尝试进⾏加锁, 就加不上了, 就会阻塞等待, ⼀直等到之前的线程解锁之后, 由操作系统唤醒⼀个新的线程,再来获取到这个锁
这就好比在公共厕所上厕所一个人进去之后把门关上并加锁,其他人就不能进来要在外面等待,等到里面的人把锁打开出来之后,大家才能共同竞争,而且这个等待过程是不按顺序的,就是你先来的话,这个打开的时候也不一定是你先进入这个厕所,也就是因为是抢占式执行的原因。
还有:
上⼀个线程解锁之后, 下⼀个线程并不是⽴即就能获取到锁. ⽽是要靠操作系统来 "唤醒". 这也就是操作系统线程调度的⼀部分⼯作
只有在上完厕所的人大喊一声“我上完了,你们可以进来了”,别人才能进来,而不是把门打开之后别人就立马进去 。
同样当synchronized对方法进行修饰的时候也是像代码块一样,
并且都把锁对象的信息储存在该对象的对象头中
2.可重入
synchronized修饰的代码有可重入的特性,不会发生“死锁”。
死锁:
自己已经完成加锁工作了,这个锁已经处于被占用的状态了,自己却想要再次进行二次加锁,但是由于前项规定这个锁只能由他自己释放,这个锁没有被释放,无法加锁,导致死锁。

在可重入锁的内部记录锁的持有者和计数器的信息
如果这个对象在一次加锁之后,在一次加锁之后计数器由零变成一,此时还想进行二次加锁就会先判断这个锁的持有者是不是自己,如果是自己的话就允许再次加锁,并将计数器中的数字改成二,表示着加了两次锁。
如果要释放锁的话就会将计数器中的数字一直减到零才释放,此时才能被别的线程捕获到。
3.内存可见性
从结果上看,synchronized解决了内存可见性的问题,因为强制要求在锁释放后才能被其他线程感知调用,结果上实现了内存可见性。
相关文章:
synchronized的特性
1.互斥 对于synchronized修饰的方法及代码块不同线程想同时进行访问就会互斥。 就比如synchronized修饰代码块时,一个线程进入该代码块就会进行“加锁”。 退出代码块时会进行“解锁”。 当其他线程想要访问被加锁的代码块时,就会阻塞等待。 阻塞等待…...
领域泛化与领域自适应
领域泛化(Domain Generalization)和领域适应(Domain Adaptation)是机器学习领域中处理不同数据分布场景下模型训练与应用的两种策略,领域泛化在泛化到目标领域时不需要进行调整,而领域自适应在适应到目标领…...
使用aspx,完成一个转发http的post请求功能的api接口,url中增加目标地址参数,传递自定义header参数
使用aspx,完成一个转发http的post请求功能的api接口,url中增加目标地址参数,传递自定义header参数 首先,简单实现一下,如何在ASPX页面中实现这个功能实现代码说明:注意事项: 然后进阶࿰…...
实际车辆行驶轨迹与预设路线偏离检测的Java实现
准备工作 本项目依赖于两个关键库:JTS Topology Suite(简称JTS),用于几何对象创建和空间分析;以及GeoTools,用于处理坐标转换和其他地理信息任务。确保开发环境中已经包含了这两个库,并且正确配…...
从excel数据导入到sqlsever遇到的问题
1、格式问题时间格式,excel中将日期列改为日期未生效,改完后,必须手动单击这个单元格才能生效,那不可能一个一个去双击。解决方案如下 2、导入之后表字段格式问题,数据类型的用navicat导入之后默认是nvarchar类型的&a…...
Linux操作系统——Linux的磁盘管理系统、文件inode及软硬链接
目录 前言 一、磁盘 1、物理结构 2、存储结构 3、磁盘的逻辑结构 二、文件系统 1、基本概念 2、组的概念 1)Data Blaocks 2)inode Table 3)inode Bitmap 4)Blocks Bitmap 5)Group Descriptor Table 6)Sup…...
算法刷题Day11: BM33 二叉树的镜像
点击题目链接 思路 转换为子问题:左右子树相反转。遍历手法:后序遍历 代码 class Solution:def Transverse(self,root: TreeNode):if root None:return rootnewleft self.Transverse(root.left)newright self.Transverse(root.right)# 对root节点…...
WPF+MVVM案例实战与特效(三十五)- 掌握 Windows 屏幕键盘控制的艺术(TouchKeyBoardHelper 类)
文章目录 1、概述2、TouchKeyBoardHelper 类1、代码实现2、代码解释3、实际应用1、帮助类库与文件创建2、项目引用运行效果3、答疑解惑1、概述 在WPF应用程序开发中,有时需要提供启动或关闭屏幕键盘(On-Screen Keyboard, OSK)的功能。为了实现这一需求,我们创建了一个名为…...
Python+OpenCV系列:绘制中文的方法
绘制中文的方法 方法一:使用Pillow(PIL)与OpenCV结合方法二:使用Matplotlib与OpenCV结合方法三:结合第三方库OpenCV-ZH注意事项 在Python中,使用OpenCV绘制中文需要处理字体加载问题,因为OpenCV…...
精品推荐 | StarLighter 1×dsDNA HS Assay Kit
关键词:核酸浓度测定,核酸定量检测试剂盒,dsDNA浓度测定,dsDNA定量检测 产品简介 StarLighter 1dsDNA HS Assay Kit是一种快速简便的双链DNA(dsDNA)荧光定量检测试剂盒,具有极高的检测灵敏度&…...
挑战用React封装100个组件【010】
Hello,大家好,今天我挑战的组件是这样的! 今天这个组件是一个打卡成功,或者获得徽章后的组件。点击按钮后,会弹出礼花。项目中的勋章是我通过AI生成的,还是很厉害的哈!稍微抠图直接使用。最后面…...
burp suite 5
声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&a…...
锐捷Web认证
文章目录 Web认证二代 Web 认证配置 🏡作者主页:点击! 🤖Datacom专栏:点击! ⏰️创作时间:2024年12月6日11点40分 Web认证 Portal 认证、Web认证 Web认证的介绍 Web 认证使用浏览器进行身份验…...
【开源免费】基于Vue和SpringBoot的服装生产管理系统(附论文)
博主说明:本文项目编号 T 066 ,文末自助获取源码 \color{red}{T066,文末自助获取源码} T066,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…...
每日速记10道MySQL面试题16
其他资料 每日速记10道java面试题01-CSDN博客 每日速记10道java面试题02-CSDN博客 每日速记10道java面试题03-CSDN博客 每日速记10道java面试题04-CSDN博客 每日速记10道java面试题05-CSDN博客 每日速记10道java面试题06-CSDN博客 每日速记10道java面试题07-CSDN博客 每…...
云计算考试题
1、与SaaS不同的,这种“云”计算形式把开发环境或者运行平台也作为一种服务给用户提供。(B) A、软件即服务 B、基于平台服务 C、基于WEB服务 D、基于管理服务 2、云计算是对(D)技术的发展与运用 A、并行计算 B、网格计算 C、分布式计算 D、三个选项都是 3、Amazon.com公司…...
无人机理论考试合格证书获取
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 轻型民用无人驾驶航空器安全操控理论培训合格证明 前言无人机特性和应用场景 前言 无人机(Drone)是一种非常受欢迎的技术产品,广泛应用于…...
AcWing 3496. 特殊年份
文章目录 前言代码思路 前言 写简单题没啥。反正都是要写的,先把能拿到的分数拿了,之后有机会再去啃一啃硬骨头。啃不下来就算了。 代码 #include<bits/stdc.h> using namespace std; char a1[10],a2[10],a3[10],a4[10],a5[10]; int main(){cin…...
YOLOv8模型改进 第二十讲 添加三重注意力机制Triplet Attention 提升小目标/遮挡目标
本文这次分享的是三重注意力机制Triplet Attention。现在注意力机制在计算机视觉任务中被广泛研究和应用,如 Squeeze-and-Excitation Networks (SENet)、Convolutional Block Attention Module (CBAM) 等。然而,这些方法存在一些局限性,例如需…...
Linux絮絮叨(三) Ubuntu桌面版添加中文拼音输入法
步骤很详细,直接上教程 一. 配置安装简体拼音输入法 #安装相应的平台支持包 sudo apt install ibus-gtk ibus-gtk3# 安装简体拼音输入法 sudo apt install ibus-pinyin安装完成如果下面的步骤找不到对应输入法可以重启一下,一般不需要 二. 添加简体拼音…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...
GAN模式奔溃的探讨论文综述(一)
简介 简介:今天带来一篇关于GAN的,对于模式奔溃的一个探讨的一个问题,帮助大家更好的解决训练中遇到的一个难题。 论文题目:An in-depth review and analysis of mode collapse in GAN 期刊:Machine Learning 链接:...
如何做好一份技术文档?从规划到实践的完整指南
如何做好一份技术文档?从规划到实践的完整指南 🌟 嗨,我是IRpickstars! 🌌 总有一行代码,能点亮万千星辰。 🔍 在技术的宇宙中,我愿做永不停歇的探索者。 ✨ 用代码丈量世界&…...
