无锁、偏向锁、轻量级锁和重量级锁

news2024/9/22 23:28:16
JDK 1.6 版本之前,所有的 Java 内置锁都是重量级锁。重量级锁会
造成 CPU 在用户态和核心态之间频繁切换,所以代价高、效率低。 JDK
1.6 版本为了减少获得锁和释放锁所带来的性能消耗,引入了偏向锁和
轻量级锁的实现。所以,在 JDK 1.6 版本中内置锁一共有 4 种状态:无锁
状态、偏向锁状态、轻量级锁状态和重量级锁状态,这些状态随着竞争
情况逐渐升级。内置锁可以升级但不能降级,意味着偏向锁升级成轻量
级锁后不能再降级成偏向锁。这种能升级却不能降级的策略,其目的是
提高获得锁和释放锁的效率。
1.无锁状态
Java 对象刚创建时还没有任何线程来竞争,说明该对象处于无锁状
态(无线程竞争它),这时偏向锁标识位是 0 ,锁状态是 01 。无锁状态
下对象的 Mark Word 如图 所示。
2.偏向锁状态
偏向锁是指一段同步代码一直被同一个线程所访问,那么该线程会
自动获取锁,降低获取锁的代价。如果内置锁处于偏向状态,当有一个
线程来竞争锁时,先用偏向锁,表示内置锁偏爱这个线程,这个线程要
执行该锁关联的同步代码时,不需要再做任何检查和切换。偏向锁在竞 争不激烈的情况下效率非常高。
偏向锁状态的 Mark Word 会记录内置锁自己偏爱的线程 ID ,内置锁
会将该线程当作自己的熟人。偏向锁状态下对象的 Mark Word 如图
示。
3.轻量级锁状态

当有两个线程开始竞争这个锁对象时,情况就发生变化了,不再是
偏向(独占)锁了,锁会升级为轻量级锁,两个线程公平竞争,哪个线
程先占有锁对象,锁对象的 Mark Word 就指向哪个线程的栈帧中的锁记
录。轻量级锁状态下对象的 Mark Word 如图 所示。
4.重量级锁状态
重量级锁会让其他申请的线程之间进入阻塞,性能降低。重量级锁
也叫同步锁,这个锁对象 Mark Word 再次发生变化,会指向一个监视器
对象,该监视器对象用集合的形式来登记和管理排队的线程。重量级锁
状态下对象的 Mark Word 所示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1543249.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【AI】大模型API调研及推荐

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 【AI】大模型API调研及推荐引入调研KimiAPI对接 国内GPT4的转发API对接 总结 【AI…

Python利用Turtle小乌龟实现推箱子游戏

文章目录: 一:运行效果 1.演示 2.思路和功能 二:代码 文件架构 level.py PushBox.py 必备知识:python图形化编程turtle小乌龟 一:运行效果 1.演示 效果图◕‿◕✌✌✌ Python利用Turtle小乌龟实现推箱子游戏运…

34-Java传输对象模式 ( Transfer Object Pattern )

Java传输对象模式 实现范例 传输对象模式(Transfer Object Pattern)用于从客户端向服务器一次性传递带有多个属性的数据传输对象也被称为数值对象,没有任何行为传输对象是一个具有 getter/setter 方法的简单的 POJO 类,它是可序列…

二分图

数据结构、算法总述:数据结构/算法 C/C-CSDN博客 二分图:节点由两个集合组成,且两个集合内部没有边的图。换言之,存在一种方案,将节点划分成满足以上性质的两个集合。 染色法 目的:验证给定的二分图是否可…

【JDBC编程】基于MySql的Java应用程序中访问数据库与交互数据的技术

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …

mybatis plus intercept修改sql

原始需求 在SQL语句前面加上一个request-id 问题描述 今天收到业务同学反馈,说接入某个SDK后,request-id本地debug发现sql已经修改了,但打印的sql中却没有request-id信息 看了下代码,发现用户的代码其实就是下方 方案一代码&am…

【C++进阶】竞赛常用库函数

一、排序 sort简介 sort函数包含在头文件<algorithm>中。在使用前需要#include <algorithm>或使用万能头文件。sort是C标准库中的一个函数模板&#xff0c;用于对指定范围内的元素进行排序。sort算法使用的是快速排序(QuickSort)或者类似快速排序的改进算法&…

OCP NVME SSD规范解读-14.Firmware固件升级要求

4.11节 Firmware Update Requirements 描述了数据中心NVMe SSD固件更新的具体要求&#xff0c;确保固件升级过程既安全又可靠&#xff0c;同时充分考虑了设备在升级过程中的可用性和功能性。 FWUP-1: 设备必须记录每一次固件激活过程。这意味着固件升级过程中&#xff0c;设备会…

一文搞懂 YOLOv9 训练推理全流程 | YOLOv9你绝对不知道的细节!

文章地址&#xff1a;https://arxiv.org/pdf/2402.13616.pdf 代码地址&#xff1a;https://github.com/WongKinYiu/yolov9 前言 在这篇博客中&#xff0c;我们来聊聊 YOLOv9。首先&#xff0c;值得注意的一点是&#xff0c;YOLOv9的变化相对较小&#xff0c;它仍然基于YOLOv5的…

在线影院项目话术(0.7w精选)

项目介绍 这个电影院项目不同于常见的基于会员限制用户观看范围的在线影院项目&#xff0c;主要就是按需购买片源来进行观看&#xff0c;用户就不会因高额的会员费而劝退。 项目的主要实现就是&#xff1a;微服务的五大主键&#xff0c;数据库使用mysql,redis&#xff0c;中间…

2024年湖北荆门市工程系列职称评审开始啦

(一)中级测试对象&#xff1a;拟参加近两年度相关系列(专业)中级技术职务评审&#xff0c;且未取得中级水平能力测试合格证书的专业技术人员。 (二)初级测试对象&#xff1a;拟参加近两年度档案专业、工程系列助理级职称评审&#xff0c;且未取得初级水平能力测试合格证书的专业…

白酒:陈酿过程中的老熟度评价与品质提升方法

在豪迈白酒的酿造过程中&#xff0c;陈酿是一个至关重要的环节。陈酿不仅能使白酒老熟&#xff0c;提品质&#xff0c;还能发展出与众不同的风味和口感。云仓酒庄深知陈酿的重要性&#xff0c;并进行了深入的研究和实践。本文将探讨陈酿过程中的老熟度评价与品质提升方法。 首先…

蓝桥杯day7刷题日记

P8697 [蓝桥杯 2019 国 C] 最长子序列 思路&#xff1a;直接遍历&#xff0c;和子序列相同就记录&#xff0c;不然就下一位 #include <iostream> #include <string> using namespace std; int res;int main() {string s,t;cin>>s>>t;int i0,j0;while…

IDEA 远程调试

1.什么是远程调试 Java提供了一个远程调试功能&#xff0c;支持设置断点及线程级的调试同时&#xff0c;不同的JVM通过接口的协议联系&#xff0c;本地的Java文件在远程JVM建立联系和通信。 2.服务端开启远程调试 开启远程调试功能&#xff0c;需要修改tomcat 的catalina.sh…

目录框架【欢迎订阅收藏】

前端篇 第一章vue.js 1.Vue.js入门及环境搭建 2.vue.js基础知识 3.Vue.js自定义组件 Vue.js路由 5.Vue.js状态管理 6.网络通信axios 第二章Tailwindcss 1.tailwindcss介绍及引入 2.基础样式 3.组件样式 4.工具样式 第三章Nuxt 1.nuxt介绍及环境搭建 2.nuxt 目录结构 3.nuxt …

ElasticSearch文档批量操作[ES系列] - 第503篇

历史文章&#xff08;文章累计500&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 《…

超声波清洗机怎么选?过来人推荐四大表现突出的宝藏眼镜清洗机!

如果你清洁眼镜的时候总是习惯用纸巾或者是衣服擦的话&#xff0c;我劝你要赶紧把这个坏习惯给改掉&#xff01;很多不知道原因的朋友会问&#xff0c;为什么不能用纸巾擦眼镜&#xff1f;其实是因为纸巾还有衣服布料上&#xff0c;存在一些比较粗糙的微粒&#xff0c;人体手部…

车载测试 HIL测试详解

HIL测试&#xff1a;即硬件在环测试&#xff0c;是一种广泛应用于汽车电子控制系统领域的测试方法。它将实际的硬件&#xff08;如ECU、传感器、执行器等&#xff09;与模拟器件&#xff08;如模型、仿真器等&#xff09;通过接口连接起来&#xff0c;模拟实际的操作环境&#…

动态规划-----最长公共子序列(及其衍生问题)

目录 一.最长公共子序列的基本概念&#xff1a; 解决动态规划问题的一般思路&#xff08;三大步骤&#xff09;&#xff1a; 二.最长公共子序列题目&#xff1a; 三.字符串的删除操作&#xff1a; 四.最小 ASCII 删除和&#xff1a; 一.最长公共子序列的基本概念&#xff…

微前端——qiankun

一、微前端 微前端是指存在于浏览器中的微服务&#xff0c;其借鉴了后端微服务的架构理念&#xff0c;将微服务的概念扩展到前端。即将一个大型的前端应用拆分为成多个模块&#xff0c;每个微前端模块可以有不同的团队开发并进行管理&#xff0c;且可以自主选择框架&#xff0…