Synchronized学习大总结
目录
1.synchronized特性
2.synchronized如何使用
3.synchronized的锁机制
1.synchronized特性
synchronized 是乐观锁,也是悲观锁,是轻量级锁(j基于自旋锁实现),也是重量级锁(基于挂起等待锁实现),它不是读写锁,是互斥锁,当一个线程抢到锁之后,其它线程阻塞等待,进入synchronized关键字修饰的代码块相当于加锁,出代码块相当于解锁.,它对同一锁对象加锁两次不会造成死锁,所以它是可重入锁,它加锁不遵循先来后到原则,所以是非公平锁.
2.synchronized如何使用
可以将一块修改操作变成原子的,需要有一个锁对象(相当于一个吉祥物),针对它进行加锁.示例代码如下,加锁方式分为两种:
① 方式一
//锁对象(继承自Object类的对象,不能是基本数据类型)static Object o = new Object();synchronized (o) {if(flag == 0) {System.out.println("a");flag = -1;o.notifyAll();} else {try {o.wait();} catch (InterruptedException e) {e.printStackTrace();}}
② 方式二
//对++操作进行加锁(锁对象为this引用指向的对象)synchronized public void add() {count++;}
3.synchronized的锁机制
如图,synchronized加锁先加的是偏向锁,简单来说,偏向锁就是标记了一下这个锁对象是哪个线程的,等发生锁竞争的时候,该线程立马就抢到这个锁,然后转变为轻量级锁(自适应的自旋锁),等锁竞争激烈起来的时候会转变为重量级锁.
注:自旋锁不停地死等,很浪费CPU资源,但是能第一时间抢到锁,但是自适应的自旋锁是等到一定的时间或者重试次数,就停止自旋.之后会总结锁策略的知识点.
相关文章:
Synchronized学习大总结
目录 1.synchronized特性 2.synchronized如何使用 3.synchronized的锁机制 1.synchronized特性 synchronized 是乐观锁,也是悲观锁,是轻量级锁(j基于自旋锁实现),也是重量级锁(基于挂起等待锁实现),它不是读写锁,是互斥锁,当一个线程抢到锁之后,其它线程阻塞等待,进入synchr…...
VN5620以太网测试——环境搭建篇
文章目录 前言一、新建以太网工程二、Port Configuration三、Link up四 Trace界面五、添加Ethernet Packet Builder六、添加ARP Packet七、添加Ethernet IG总结前言 CANoe(CAN open environment)VN5620 :是一个紧凑而强大的接口,用于以太网网络的分析、仿真、测试和验证。 …...
redis哨兵和集群部署手册
一、哨兵模式原理及作用 1.原理 哨兵(sentinel): 是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现 故障时,通过投票机制选择新的master并将所有slave连接到新的master。所以整个运行哨兵的集…...
ctfshow web入门 java 295 298-300
其他没啥好讲的,都是工具就通杀了 web295 漏洞地址 http://ip/S2-048/integration/saveGangster.action 这里我们可以看到他是解析了 尝试使用网上的payload %{(#dmognl.OgnlContextDEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess#dm):((#container#cont…...
SWIG包装器使用指南——(四)C#使用SWIG简介与实践
SWIG系列:http://t.csdn.cn/cIAcr 文章目录一、简介二、全局函数、变量、常量三、继承四、传递指针、引用、数组与值五、基本类型的指针与引用六、基本类型的数组七、基本类型的默认map规则八、常用的typemap方法九、代码插入十、实践10.1 如何映射Foo*&到ref F…...
HashTable, HashMap 和 ConcurrentHashMap
HashTable, HashMap 和 ConcurrentHashMap 都是 Java 集合框架中的类,用于存储和操作键值对。它们之间存在一些关键区别,如下所示: 1.同步性: HashTable:线程安全,所有的方法都是同步的(synchr…...
ToBeWritten之IoT 技战法
也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 转移发布平台通知:将不再在CSDN博客发布新文章,敬…...
基于ASP.NET开发的医院手术麻醉信息管理系统源码 项目源码
系统主要功能介绍: 门诊科室管理系统:手术快速申请、手术申请、手术审核 麻醉科管理系统:手术安排、术后处方、术后小结、PCS实施及管理记录、手术流程 手术护理系统:手术安排、安排临时手术、添加急诊手术、局麻手术护理、整体护…...
伪加密超具体破解办法,直击原理底层,细致演示!!!
前言: 由于我自己目前在misc和取证工作中,也遇到很多压缩包的问题,我个人非常喜欢做压缩包的题目,但也会遇到伪加密问题难以破解,全网ctf教程我都看完了,但是都觉得不够具体,所以我写一篇博客&…...
ChatGPT大规模封锁亚洲地区账号
我是卢松松,点点上面的头像,欢迎关注我哦! 在毫无征兆的情况下,从3月31日开始OpenAI大规模封号,而且主要集中在亚洲地区,特别是ip地址在台湾、日本、香港三地的,命中率目测40%。新注册的账号、…...
脂肪酸脂质Myristic acid PEG NHS,Myristic-acid PEG NHS ester,肉豆蔻酸PEG活性酯,具有优异疏水性
一、基础产品数据: 中文名:肉豆蔻酸PEG N-羟基琥珀酰亚胺,肉豆蔻酸PEG活性酯 英文名:Myristic acid PEG NHS,Myristic-acid PEG NHS ester,Myristic acid PEG SE 结构式(Structural)…...
MFC - CFormView类学习1
CFormView简介 MFC提供了一个名为CFormView的特殊视图类,我们称其为表单视图。表单视图是指用控件来输入和输出数据的视图,用户可以方便地在表单视图中使用控件。表单视图具有对话框和滚动视图的特性,它使程序看起来象是一个具有滚动条的对话…...
图像预处理方法
图像预处理 膨胀腐蚀概述 ⚫ 膨胀、腐蚀属于形态学的操作, 简单来说就是基于形状的一系列图像处理操作 ⚫ 膨胀腐蚀是基于高亮部分(白色)操作的, 膨胀是対高亮部分进行膨胀, 类似“领域扩张”, 腐蚀是高亮部分被腐蚀, 类似“领域被蚕食” ⚫ 膨胀腐蚀的应用和功能: 消除噪声…...
【蓝桥杯C/C++】专题六:动态规划
专题六:动态规划 目录专题六:动态规划导读什么是动态规划解决的问题解题步骤动态规划应该如何debug记忆化搜索斐波那契数题目代码题解爬楼梯题目代码题解使用最小花费爬楼梯题目代码题解不同路径题目题解dfsdp凑硬币题目题解dfsdp滑雪题目代码题解汉罗塔…...
图的定义和基本术语
图的定义和基本术语1.图的定义2.图的基本术语3.图的分类1.图的定义 图是由顶点和有穷非空集合和顶点边的集合吗,表示为G(V,E)。 G表示一个图,V是图G的顶点(数据元素)的集合,E是图G中顶点之间边的集合。在图中…...
041:cesium加载Blue Marble地图
第041个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中加载Blue Marble地图。Blue Marble是一个术语,用来描述星球漂浮在浩瀚太空中的形象。早在 1972 年,阿波罗 17 号任务的工作人员就首次捕捉到了地球的标志性卫星图像,并将其称为“Blue Marble”。从那时起,NA…...
【概念梳理】激活函数
一、引言 常用的激活函数如下: 1、Sigmoid函数 2、Tanh函数 3、ReLU函数 4、ELU函数 5、PReLU函数 6、Leaky ReLU函数 7、Maxout函数 8、Mish函数 二、激活函数的定义 多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,…...
【python】@property 和 @staticmethod
property 和 staticmethod 是 Python 中的两个装饰器,它们分别用于在类中创建属性或静态方法。它们的作用如下: property property:用于将类的一个方法作为属性访问。在 Python 中,使用“getter” 和“setter”方法来实现属性&a…...
Spring题集 - Spring AOP相关面试题总结
文章目录01. Spring AOP 的理解?02. Spring AOP 思想的代码实现03. Spring AOP 的相关术语有哪些?04. Spring AOP 基于注解的切面实现?05. Spring AOP 的通知有哪些类型?06. AOP 有哪些实现方式?07. Spring AOP 和 AspectJ AOP 有…...
分考场
[蓝桥杯 2017 国 C] 分考场(假题:最小色数) 题目描述 nnn 个人参加某项特殊考试。 为了公平,要求任何两个认识的人不能分在同一个考场。 求最少需要分几个考场才能满足条件。 输入格式 第一行,一个整数 n(1<n<100)n(1<n<100…...
PyCharm运行YOLOv8报错:onnx版本冲突的终极解决方案(附详细步骤)
PyCharm运行YOLOv8报错:onnx版本冲突的终极解决方案(附详细步骤) 当你在PyCharm中尝试将YOLOv8模型导出为ONNX格式时,突然弹出一条令人头疼的错误信息:module onnx has no attribute __version__。这就像在高速公路上…...
FPGA实战:用Verilog手搓8点FFT核心(附完整代码与仿真对比)
FPGA实战:从零构建8点FFT核心的完整指南 在数字信号处理领域,快速傅里叶变换(FFT)算法是当之无愧的"瑞士军刀"。作为一名FPGA工程师,我曾在多个项目中需要将FFT算法部署到硬件平台,期间积累了不少…...
Cobar高可用性实现:心跳检测与故障转移的完整教程
Cobar高可用性实现:心跳检测与故障转移的完整教程 【免费下载链接】cobar a proxy for sharding databases and tables 项目地址: https://gitcode.com/gh_mirrors/co/cobar Cobar作为阿里巴巴开源的分布式数据库中间件,其高可用性实现是保障企业…...
【Zynq 进阶三】榨干带宽!深度解析 Linux 下 AXI DMA 高速数据搬运与 Cache 一致性实战
【Zynq 进阶三】榨干带宽!深度解析 Linux 下 AXI DMA 高速数据搬运与 Cache 一致性实战 文章目录【Zynq 进阶三】榨干带宽!深度解析 Linux 下 AXI DMA 高速数据搬运与 Cache 一致性实战📝 前言:为什么 UIO 搞不定海量数据…...
【记录】LLM|解答家人对AI大模型工具选取的一些疑问
写于2026年3月26日晚上。 作为一个相关研究的研究生,我觉得有必要针对还在读高中的同学(实则是针对亲戚)写一点大模型的使用简明教程。这里并不打算废话太多关于所谓提示词工程或者是AI焦虑类型的内容,只是想从一个长辈的角度尽量…...
终极指南:Navicat Premium Mac版无限试用重置的完整解决方案
终极指南:Navicat Premium Mac版无限试用重置的完整解决方案 【免费下载链接】navicat_reset_mac navicat16 mac版无限重置试用期脚本 项目地址: https://gitcode.com/gh_mirrors/na/navicat_reset_mac 还在为Navicat Premium试用期到期而烦恼吗?…...
C语言数字炸弹游戏:如何优化随机数生成与用户交互体验
C语言数字炸弹游戏:如何优化随机数生成与用户交互体验 数字炸弹游戏是许多C语言初学者接触的第一个完整项目,它简单有趣却蕴含着程序设计的关键要素。本文将深入探讨如何通过优化随机数生成算法和提升用户交互体验,让这个经典小游戏焕发新生。…...
次元画室一键部署教程:Python环境快速配置与模型启动
次元画室一键部署教程:Python环境快速配置与模型启动 你是不是也对AI绘画感兴趣,想自己动手试试,结果被复杂的Python环境、CUDA版本、模型权重这些术语给吓退了?别担心,这种感觉我太懂了。几年前我第一次接触这些时&a…...
OpenClaw语音交互方案:Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF对接语音输入输出模块
OpenClaw语音交互方案:Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF对接语音输入输出模块 1. 为什么需要语音交互能力 去年冬天的一个深夜,我正蜷在沙发上调试一个自动化脚本,突然意识到——当双手被咖啡杯占据时,用语…...
Gradio实战:用gr.Button和gr.Markdown打造高颜值交互界面(附CSS美化技巧)
Gradio界面美学革命:从基础组件到高级定制的全链路设计指南 在AI应用爆炸式增长的今天,一个美观直观的交互界面已经成为产品成功的关键因素。Gradio作为最受欢迎的AI应用快速构建工具,其默认样式往往难以满足专业级产品的视觉需求。本文将带您…...
