基础--吊打面试官--精通synchronized底层实现原理

news2025/1/15 17:34:52

synchonized是一个字段

1.0之前太慢,重,jdk1.0后修改,变得轻.修改的原理是:以前是涉及到用户态和内核态的交互,现在是用户态实现。

基本概念理解:

用户态和内核态的概念:程序的不同级别。内核态级别更高,理解是操作权限更高,更贴近系统。

重量级:用户态到内核态申请;内核态再返回结果给用户态。

轻量级:都是在用户态实现的。

cas概念:是一种自偏锁,更是一种乐观锁的概念。当前值0;计算结果值1;会去看内存值是不是0,如果是,把1去更新内存值;2)如果发现,内存值是8,会重新读取一次,读到8,再计算计算结果得到9,再放入内存;

特殊场景cas中遇到ABA问题,即:有线程把数据从0改为8,又改回到0,和原来保持了一致;对于这种情况,加版本号去记录有过修改。

现在syn的实现是:先轻量级实现,不能实现,再重量级解决。

cas最终的原理:java层面,追踪到native方法上;追踪到c语言上,经过几层追寻,发现最后用的是lock cmpxchg(cmpxchg=cas修改变量值)

以Object对象为例子,对象的布局分为几个部分:

1)第一部分,叫markword,包含了锁信息,hashcode,gc信息;8bit

2)第二部分,是glasspoint,对象类型,4bit

3)成员变量

4)padding,为排列为8的倍数,空出来的部分

synchonized的优化:

视频去哪了呢?_哔哩哔哩_bilibili

############################################

双重检查锁(Dcl:double check lock:比如某个变量要安全操作,锁之前之后都要进行检查)要不要

happens-before原则,指定了重排序必须遵守的原则

volatile的解释   CSDN

最佳参考文章:

谈谈 JVM 内部锁升级过程 - 知乎

参考视频:

视频去哪了呢?_哔哩哔哩_bilibili

面试题

synchronized和volatile的区别

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

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

相关文章

Vue学习:事件处理(与用户产生交互-点击)

Vue对元素绑定事件&#xff0c;需要使用指令&#xff0c;也就是v-开头 v-on&#xff1a;当什么什么时候时候 点击-出现弹窗&#xff1a;使用method方法 <!-- 准备容器 --><div idroot> <h2>欢迎页面&#xff0c;你好 {{name}}</h2><!-- v-on:click…

(附源码)小程序 法律全书 毕业设计 280844

小程序spring boot法律全书管理系统 摘 要 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;小程序法律全书被用…

计算机毕业设计ssm+vue基本微信小程序的灾情救助系统 uniapp 小程序

项目介绍 自新冠疫情爆发以来,给各行各业带来了前所未有的挑战。国务院、党中央高度重视灾情救助工作,研究出一系列重要的措施和方法。并广泛利用信息化技术手段,对灾情信息发布、救助管理等进行管理。对于受灾地区来说,存在管理难度大,手段单一,灾民流动性复杂等问题。单靠人…

git 暂存当前分支修改,切换到别的分支

收藏&#xff0c;原文链接Git学习记录-git保留/丢弃当前分支修改并切换至其他分支 - 爱写bug的程序员 - 博客园 (cnblogs.com) 笔者在本地终端进行 git 工作目录的相关处理时&#xff0c;遇到由于某种情况需要使用 git checkout 命令切换到其他分支的情景。此时&#xff0c;若…

3 - 线程池 Java内置的线程池 - ExecutorService

1、ExecutorService的介绍 ExecutorService 接口继承了Executor 接口&#xff0c;是Executor 的子接口。 Executors类 提供工厂方法用来创建不同类型的线程池。Executors是工具类&#xff0c;他提供对ThreadPoolExecutor的封装&#xff0c;会产生几种线程池供大家使用。 关于…

derby 转 mysql

背景 nacos使用standalone方式启动&#xff0c;数据存储到内置的derby数据库中&#xff0c;现在要更改为集群启动&#xff0c;原数据要转成mysql。 执行过程 1.nacos内置的derby数据打包后放到本地 tar -cvf data.tar nacos/data/derby-data 2.通过idea添加Apache Derby&a…

【区块链】Ankr被黑引发的思考

机会 三明治交易、夹子机器人、抢跑、抢新、抢购、秒杀&#xff0c;相信这些词你都听说过了&#xff0c;区块链上的各种套利操作&#xff0c;基本上都有一个大前提&#xff0c;就是监听链上最新的未打包交易&#xff0c;才能在第一时间抢占先机。 前段时间Ankr被黑&#xff0…

进阶 - Git的自定义

Git的自定义 忽略特殊文件 有些时候&#xff0c;你必须把某些文件放到Git工作目录中&#xff0c;但又不能提交它们&#xff0c;比如保存了数据库密码的配置文件啦&#xff0c;等等&#xff0c;每次git status都会显示Untracked files ...&#xff0c;有强迫症的童鞋心里肯定不…

大学生网页制作期末作业——html+css+javascript+jquery旅游官网6页 html大学生网站开发实践作业 web网页设计实例作业

&#x1f468;‍&#x1f393;静态网站的编写主要是用 HTML DⅣV CSSJS等来完成页面的排版设计&#x1f469;‍&#x1f393;&#xff0c;一般的网页作业需要融入以下知识点&#xff1a;div布局、浮动定位、高级css、表格、表单及验证、js轮播图、音频视频Fash的应用、uli、下拉…

java alibaba fastjson自定义序列化反序列化(教你解决问题思路)

大家版本不一样方式可能不一样&#xff0c;我不管你的fastjson版本是哪个&#xff0c;按照我这个思路去弄就行 写一个JSONObject类&#xff0c;导入fastjson的JSONObject&#xff0c;然后CTRL鼠标左键点进去看JSONObject源码&#xff0c;然后点击IDEA的左上角select opened fil…

掘金量化如何精准选股?

说起掘金量化如何精准选股的这个问题&#xff0c;相信大家也很期待&#xff0c;就比如说我们在量化投资中&#xff0c;一方面对股票的涨跌是需要灵活的去判断&#xff0c;才能知晓这其中有哪些是我们应该选择的股票&#xff0c;但是要自己去观察&#xff0c;也是很麻烦&#xf…

【Python项目】毕业设计必备,Python基于面向对象+tkinter打造学生信息管理系统 | 附源码

前言 halo&#xff0c;包子们上午好 很多学计算机的小伙伴应该都知道&#xff0c;毕业设计是一个头疼的东西 今天的话小编这边给大家准备好了一个Python基于面向对象tkinter打造学生信息管理系统 这不是毕业设计必备项目 说实话操作起来还是有那么一点点的难度的&#xff0c;但…

Spring Boot源码学习:自动配置与自定义注解详解

入门 RestContrller :此注解标记的类下的 所有 方法均会返回一个 domain 对象以代替视图Controller、ResponseBody 的缩写使用 Jackson2 以及 MappingJackson2HttpMessageConverter 类自动转换对象为 JSONSpringBootApplication&#xff1a;快捷注释&#xff0c;包含以下内容C…

“新十条”来了,精准防控是为了“行稳致远”

文|螳螂观察 作者|松雅湖、小江 形势正在快速变化&#xff0c;朝越来越好的方向。 12月7日&#xff0c;国务院联防联控机制发布防疫“新十条”措施&#xff0c;指向精准&#xff0c;要求明确&#xff0c;既要疫情防控精准化、科学化&#xff0c;也要防疫成果“行稳致远”&am…

sentence Bert解读及代码示例

0-前序 Bert已经是相当6了&#xff0c;但在STS&#xff08;语义文本相似性&#xff09;任务中&#xff0c;需要将两个句子都输入到网络中&#xff0c;也就是说要过模型&#xff0c;这样计算量就大了。如下是文本相似性&#xff0c;并不是语义。 from transformers import Ber…

RabbitMQ、RocketMQ、Kafka 三大组件详细教程,一文带你学完全部知识

RabbitMQ RabbitMQ各组件的功能 Broker &#xff1a;一个RabbitMQ实例就是一个BrokerVirtual Host &#xff1a;虚拟主机。相当于MySQL的DataBase&#xff0c;一个Broker上可以存在多个vhost&#xff0c;vhost之间相互隔离。每个vhost都拥有自己的队列、交换机、绑定和权限机…

项目执行管理的8个步骤

常言道&#xff1a;说起来容易&#xff0c;做起来难。在项目执行过程中&#xff0c;许多事情可能会出错。这就是为什么执行过程中的监控和跟踪很重要。 项目执行&#xff0c;如同项目管理一样&#xff0c;被分解成若干步骤&#xff0c;以确保你不会忽视任何关键的东西。八个项…

如何查看Chrome浏览器的页面缓存内容【详细教程】

如何查看浏览器页面缓存内容——代码&控制台知识调用前言引入控制台输入代码查看在控制台application查看知识调用 文章可能需要用到的知识&#x1f525;&#x1f525;&#x1f525;浏览器缓存有哪些&#xff08;通用缓存有哪些&#xff09; 前言引入 浏览器有多种缓存&a…

C++/Qt编程规范

文章目录一、头文件规范二、变量命名三、信号和槽四、注释一、头文件规范 在编码中对头文件的引用&#xff0c;建议按照以下顺序进行&#xff1a; 1)类定义头文件 2)其他库头文件 a)Qt模块头文件 b)XTAL平台框架模块头文件 c)第三方库头文件 d)自定义公共库头文件 二、变量命…

Linux7层负载均衡-Haproxy

Linux7层负载均衡 概述&#xff1a; 是一款高性能的负载均衡软件。 因为其专注于负载均衡这一些事情&#xff0c; 因此与nginx比起来在负载均衡这件事情上做更好&#xff0c;更专业。 特点&#xff1a; •支持tcp / http 两种协议层的负载均衡&#xff0c;使得其负载均衡功能…