多线程之内置锁原理简介
JAVA提供了一种内置锁的机制来支持原子性,同步代码块。同步代码块分两部分组成:1)一个是作为锁的对象引用2)由这个锁保护的代码块
注意点:以关键字sync...修饰的方法就是一种横跨整个方法体的同步代码块,其中该同步代码块的锁就是方法调用所在的对象。
内置锁原理:
为每个锁分配一个计数器和锁持有者
当线程请求一个未被占用的锁时,JVM将记下锁的持有者,并且将计数器加1;如果同一个线程再次获取这个锁,者将计数器+1,直接进入;以后当线程退出同步代码块时,计数器减1,直到0释放锁
public class classA{
public synchronized void doSomething(){
xxx
}
}
public class classB extends classA{
public synchronized void doSomething(){
xxx
super.doSomething();
}
}
这段代码如果没有可重入的概念,就会引发死锁。
原因是当调用super.dosomething()方法时,发现锁已经被占用,从而线程永远被停顿下去,等待一个永远也获取不到的锁。重入锁避免了死锁的发生。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?