网站首页 > java教程 正文
大家好,我是mikechen。
Java锁升级会涉及:偏向锁、轻量级锁、重量级锁,也是大厂经常考察的内容,下面我就全面来详解锁:偏向锁、轻量级锁、重量级锁@mikechen
本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。
偏向锁
偏向锁是JDK6中引入的一项锁优化,大多数情况下,锁不仅不存在多线程竞争,而且总是由同一线程多次获得,为了让线程获得锁的代价更低而引入了偏向锁。
偏向锁的基本思想是:
- 在无竞争的情况下,将对象的锁定状态记录在对象头中,并将线程ID记录在锁标志中。
- 以后访问该对象时,只需判断是否是记录的线程ID即可,不需要进行额外的加锁和解锁操作,从而减少了不必要的操作,提高了程序的性能。
- 当一个线程第一次访问一个对象时,它会尝试使用CAS操作将对象头中的标记位设置为偏向锁,并将自己的线程ID记录在锁标志中。
- 之后,该线程再次访问该对象时,会优先判断是否是自己的线程ID,如果是,则可以直接进入临界区,而不需要再次加锁和解锁。
轻量级锁
如果另外一个线程尝试访问这个对象,此时该对象的偏向锁状态就会失效,变成轻量级锁。
轻量级锁(lightweight lock)是Java虚拟机为了提高同步性能而引入的一种锁优化技术。
轻量级锁的优势在于,在无竞争的情况下,它避免了线程上下文切换、线程阻塞等操作,从而提高了程序的性能。
但是,轻量级锁在多线程竞争不激烈的情况下,可以有效地提高同步性能,但如果多个线程同时竞争同一个锁对象,轻量级锁的优化会失效,转而使用重量级锁,
重量级锁
重量级锁(heavyweight lock)是Java虚拟机为了保证多线程程序的数据一致性而引入的一种锁机制。
重量级锁的优势在于,它能够保证多线程程序的数据一致性,避免了数据竞争、死锁等问题。
但是,在高并发场景下,由于锁的竞争过于激烈,多个线程需要不断地竞争和阻塞等待锁的释放,从而导致程序性能下降。
重量级锁的实现需要依赖操作系统的底层支持,这种实现方式的代价比较高,会带来较大的性能消耗,所以放到最后升级为重量级锁。
锁的总结
本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。
猜你喜欢
- 2024-10-05 Java 中的锁原理、锁优化、CAS、AQS 详解
- 2024-10-05 打通 JAVA 与内核系列之 一 ReentrantLock 锁的实现原理
- 2024-10-05 JAVA中锁的深入理解与解析(java中锁的种类)
- 2024-10-05 Java中的各种锁(java锁的用法)
- 2024-10-05 你不知道的java的锁机制(java锁机制详细讲解)
- 2024-10-05 知识点深度解读系列-JAVA锁(java中锁)
- 2024-10-05 Java锁的理解(java锁的概念)
- 2024-10-05 简单了解下Java中锁的概念和原理(java锁的用法)
- 2024-10-05 一文搞懂 JAVA 主流锁设计(java锁是什么)
- 2024-10-05 面试官问:Java 中的锁有哪些?我跪了……
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)