123 java锁synchronized相关内容
自旋锁:循环等待,不断尝试获取,成功后退出。
乐观锁: 修改数据时发现数据变化则重读数据并修改---假定不冲突
悲观锁:从读数据开始就加锁 -- 假定冲突
独占锁:一把用写,其他线程不能加锁。
共享锁:读,可以加读锁,但不能加写锁。
(不)可重入锁:已经获取锁的线程未释放前重新获取锁,是否阻塞。reentrantlock,synchronized 均可重入
公平锁,非公平锁:是否按顺序拿锁。
synchronized:
对非静态方法加锁this,静态方法加锁:class
可重入,独占锁,悲观锁
单线程内无意义的锁操作,触发jit后会出现锁消除
合并多个无意义的小锁为一个锁--锁粗化。jvm处理时触发jit优化。
实例锁的标记存储在对象头(class meta address、array length、markword)中 ;mark word(hashcode,threadid、lock record address、monitor address,forword address) 状态(unlocked、biased、light-weight lock,heavy-weight lock,marked for gc) 状态和存的值一一对应。
抢锁时:读取对象的mark word存入当前线程;cas操作mark word,新值 local record address(例:轻量级锁)--线程不同值不同(指向保存开始的hashcode地址)。没有成功的线程则开始自旋,自旋到一定程度后 锁升级-->重量级锁。
重量级锁: 出现owner指向拿到锁线程,失败线程停止自旋挂起进入等待队列。 monitor address--指向object monitor
偏向锁:jdk6后默认开启。加锁后不解锁,保存threadId
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性