锁之Syncronized(java面经)

在Java中,锁机制是用于管理多线程环境下的资源访问,以确保数据的一致性和完整性。Java提供了多种锁的实现方式,包括但不限于:

锁从宏观上分类,分为悲观锁与乐观锁。

乐观锁: 即读多写少 , 并发的可能性小 , 一般只有更新时检测 别人是否有更新过 , Java中基本都是通过CAS操作,CAS是一种更新的原子操作,比较当前值跟传入值是否一样,一样则更新,否则失败。

悲观锁 : 即写多的情况 , 并发的可能性高 , 每次拿数据时,别人都会修改 , java中的悲观锁就是Synchronize、AQS框架下的锁则是先尝试CAS乐观锁去获取锁,获取不到才会转换为悲观锁,如:ReentrantLock。

偏向锁

偏向锁,顾名思义它会偏向于第一个访问锁的线程,如果在运行过程中,同步锁只有一个线程访问,不存在多线程争用的情况,则线程是不需要触发同步的,这种情况下,就会给线程加一个偏向锁。

轻量级锁

轻量级锁是由偏向锁升级来的,偏向锁运行在一个线程进入同步块的情况下,当第二个线程加入锁争用的时候,偏向锁就会升级为轻量级锁;

自旋锁

自旋锁原理非常简单,如果持有锁的线程能在很短时间内释放锁资源,那么那些等待竞争锁的线程就不需要做内核态和用户态之间的切换进入阻塞挂起状态,它们只需要等一等(自旋),等持有锁的线程释放锁后即可立即获取锁,这样就避免用户线程和内核的切换的消耗。

  1. synchronized

    • 关键字: synchronized 是Java语言级别的锁,可以用于修饰方法或代码块。
    • 对象锁: 当synchronized应用于对象的方法或代码块时,锁的是该对象的内部监视器(monitor)。
    • 类锁: 当synchronized应用于静态方法或类的静态代码块时,锁的是类的Class对象。
  2. Lock接口及其实现

    • ReentrantLock: 是java.util.concurrent.locks.Lock接口的一个可重入的实现,提供了比synchronized更灵活的锁操作。
    • ReadWriteLock: 提供读写锁的机制,允许多个读线程同时访问,但写操作是排他的。
    • StampedLock: 一种更高级的锁,提供了乐观读、悲观读、写等操作,可以替代读写锁。
  3. ThreadLocal

    • 不是一种锁,但它可以提供线程隔离的变量副本,从而避免了锁的需求。
  4. 原子类

    • AtomicInteger, AtomicLong, AtomicReference等,内部使用了Unsafe类的CAS操作来实现线程安全的更新。
  5. 并发容器

    • ConcurrentHashMap, CopyOnWriteArrayList等,内部实现了线程安全的并发操作。

讲一下syncronized的底层原理,知道锁升级吗?

synchronized的底层原理

synchronized关键字在JVM层面上是基于监视器锁(monitor)实现的。在HotSpot虚拟机中,监视器锁是由ObjectMonitor对象实现的,每个对象都有一个与之关联的ObjectMonitor对象。当一个线程试图获取锁时,它会尝试获取该对象的ObjectMonitor。如果ObjectMonitor未被其他线程持有,当前线程就会获得锁,并将ObjectMonitor的状态设置为“已锁定”,并将线程的引用存储在ObjectMonitorowner字段中。其他线程将会被阻塞,直到锁被释放。

synchronized有两种使用方式:

  • 作为代码块的一部分,使用显式的锁对象。
  • 作为方法的修饰符,隐式地使用当前对象或类对象作为锁。

锁升级

Java的锁升级机制是指synchronized锁在不同的竞争程度下自动变化其锁的级别,以减少锁带来的开销。锁升级主要包括以下几种状态:

  1. 偏向锁(Biased Locking): 如果锁没有任何竞争,那么线程可以直接获得锁而无需任何同步开销。这是锁的最低级别。
  2. 轻量级锁(Lightweight Locking): 当有竞争时,偏向锁会升级为轻量级锁。轻量级锁使用CPU的CAS操作尝试获取锁。
  3. 重量级锁(Heavyweight Locking): 当轻量级锁争用失败时,会升级为重量级锁,此时会使用操作系统提供的互斥锁(mutex),线程可能会被阻塞。

锁升级的目的是在低竞争情况下使用更轻量的锁,而在高竞争情况下使用更重的锁,以达到平衡锁的性能和资源消耗的目的。锁升级是自动的,由JVM根据锁的竞争程度动态决定。

锁升级过程(偏向锁/轻量级锁/重量级锁)_偏向锁升级为轻量级锁过程-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

uniapp/Android App上架三星市场需要下载所需要的SDK

只需添加以下一个权限在AndroidManifest.xml <uses-permission android:name"com.samsung.android.providers.context.permission.WRITE_USE_APP_FEATURE_SURVEY"/>uniapp开发的&#xff0c;需要在App权限配置中加入以上的额外权限&#xff1a;

Generative Modeling by Estimating Gradients of the Data Distribution

Generative Modeling by Estimating Gradients of the Data Distribution 本文介绍宋飏提出的带噪声扰动的基于得分的生成模型。首先介绍基本的基于得分的生成模型的训练方法&#xff08;得分匹配&#xff09;和采样方法&#xff08;朗之万动力学&#xff09;。然后基于流形假…

2024 年 亚太赛 APMCM (B题)中文赛道国际大学生数学建模挑战赛 |洪水灾害数据分析 | 数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2022年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题&#xff01; 完整内容可以在文章末尾领取&#xff01; 该段文字…

HTML内容爬取:使用Objective-C进行网页数据提取

网页爬取简介 网页爬取&#xff0c;通常被称为网络爬虫或爬虫&#xff0c;是一种自动浏览网页并提取所需数据的技术。这些数据可以是文本、图片、链接或任何网页上的元素。爬虫通常遵循一定的规则&#xff0c;访问网页&#xff0c;解析页面内容&#xff0c;并存储所需信息。 …

自动化立体仓库出入库能力及堆垛机节拍

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》人俱乐部 完整版文件和更多学习资料&#xff0c;请球友到知识星球【智能仓储物流技术研习社】自行下载 自动化立体仓库的出入库能力、堆垛机节拍以…

用720云搭建数字孪生VR智慧安防系统,赋能安防升级!

“安全防范"一直是我国城镇化发展进程中重点关注的工作板块&#xff0c;随着时代发展需求与科技的日新月异&#xff0c;安防行业正在积极融合VR3D数字孪生技术&#xff0c;升级安防数字基础设施和安防产品服务创新。 今年2月&#xff0c;《数字中国建设整体布局规划》的出…

Pycharm的终端(Terminal)中切换到当前项目所在的虚拟环境

1.在Pycharm最下端点击终端/Terminal, 2.点击终端窗口最上端最右边的∨&#xff0c; 3.点击Command Prompt&#xff0c;切换环境&#xff0c; 可以看到现在环境已经由默认的PS(Window PowerShell)切换为项目所使用的虚拟环境。 4.更近一步&#xff0c;如果想让Pycharm默认显示…

macOS使用Karabiner-Elements解决罗技鼠标G304连击、单击变双击的故障

记录一下罗技鼠标G304单击变双击的软件解决过程和方案&#xff08;适用于macOS&#xff0c; 如果是Windows&#xff0c;使用AutoHotKey也有类似解决办法、方案&#xff0c;改日提供&#xff09;&#xff1a; 背景&#xff1a;通过罗技Logitech G HUB软件对罗技的游戏鼠标侧键b…

1-4 NLP发展历史与我的工作感悟

1-4 NLP发展历史与我的工作感悟 主目录点这里 第一个重要节点&#xff1a;word2vec词嵌入 能够将无限的词句表示为有限的词向量空间&#xff0c;而且运算比较快&#xff0c;使得文本与文本间的运算有了可能。 第二个重要节点&#xff1a;Transformer和bert 为预训练语言模型发…

2024 世界人工智能大会暨人工智能全球治理高级别会议全体会议在上海举办,推动智能向善造福全人类

2024 年 7 月 4 日&#xff0c;2024 世界人工智能大会暨人工智能全球治理高级别会议-全体会议在上海世博中心举办。联合国以及各国政府代表、专业国际组织代表&#xff0c;全球知名专家、企业家、投资家 1000 余人参加了本次会议&#xff0c;围绕“以共商促共享&#xff0c;以善…

搜维尔科技:如何使用 SenseGlove Nova 加速手部运动功能的恢复

District XR 的VR 培训 5 年多来&#xff0c;District XR 一直在为最大的工业公司创建 VR 和 AR 项目。 客户&#xff1a;District XR 客户代表&#xff1a;尼古拉沃尔科夫 他的角色&#xff1a;District XR 首席执行官 面临解决的挑战 该公司正在寻找一种方法来加速身体伤…

JavaScript——while类型

目录 任务描述 相关知识 while类型 编程要求 任务描述 质数的定义如下&#xff1a;大于1的自然数&#xff0c;且除了1和本身外没有别的因数。如2、3、5、7。 本关任务&#xff1a;利用循环结构求质数的和。 相关知识 在选择结构中&#xff0c;条件会被测试一次&#xff…

JAVA进阶学习10

文章目录 一、创建不可变集合二、Stream流2.1 Stream流的获取2.1 Stream流的中间方法2.2 Stream流的终结方法 一、创建不可变集合 意义&#xff1a;如果一个集合中的数据在复制或使用过程中不能修改&#xff0c;或者被其他对象调用时不能改变内部数据&#xff0c;即增加数据的安…

【靶机实战】Apache Log4j2命令执行漏洞复现

# 在线靶场 可以通过访问极核官方靶场开启靶机实验&#xff1a;极核靶场 -> 漏洞复现靶场 -> Log4j2-RCE 原文&#xff1a;【靶机实战】Apache Log4j2命令执行漏洞复现 - 极核GetShell (get-shell.com) # 简介 Apache Log4j2 是一个广泛使用的 Java 日志记录库&#…

C++初学者指南-4.诊断---基础:警告和测试

C初学者指南-4.诊断—基础知识&#xff1a;警告和测试 文章目录 C初学者指南-4.诊断---基础知识&#xff1a;警告和测试1. 术语和技术记住&#xff1a;使用专用类型&#xff01; 2.编译器警告Gcc/CLang 编译器选项MS Visual Studio 编译器选项 3.断言运行时断言静态断言&#x…

系统架构设计师——计算机体系结构

分值占比3-4分 计算机硬件组成 计算机硬件组成主要包括主机、存储器和输入/输出设备。 主机&#xff1a;主机是计算机的核心部分&#xff0c;包括运算器、控制器、主存等组件。运算器负责执行算术和逻辑运算&#xff1b;控制器负责协调和控制计算机的各个部件&#xff1b;主存…

react+ts+antd项目搭建

前言&#xff1a; 基于ts语言创建react项目&#xff0c;node版本是v16.14.2 一、 脚手架创建项目 全局安装 npm install -g creacte-react-app创建项目file-management&#xff0c;ts需要添加–template typescript npx create-react-app file-management --template typesc…

如何搭建10万个H100 GPU的集群:电力、并行化、网络拓扑与成本优化

引言 在现代人工智能的发展中&#xff0c;构建大规模GPU集群是提升计算能力的关键手段。今天我们探讨如何搭建一个包含10万个H100 GPU的集群。这个项目不仅涉及巨大的资本支出&#xff0c;还面临电力供应、并行化处理、网络拓扑结构以及可靠性和恢复等多方面的挑战。通过深入分…

天命奇御下载

解压码/安装码 615634 天翼&#xff1a;https://cloud.189.cn/t/qAjmAnIB3eIv 链接: https://pan.baidu.com/s/1rArV_Q_pB-9U4kEDtWf_gQ 提取码: igaq 天命奇御/官方中文/整合V.2.3DLC伏虎迷蹤/完美学习版下载地址&#xff1a; 点击下载 原始地址:https://www.aiwanba.net/post…