首页 > 其他分享 >解锁Synchronized的奥秘:从原理到场景,再到锁升级全攻略!

解锁Synchronized的奥秘:从原理到场景,再到锁升级全攻略!

时间:2024-08-01 17:28:41浏览次数:18  
标签:Synchronized 解锁 全攻略 获取 监视器 JVM 线程 轻量级

本期说一下Synchronized的相关面试题。

Synchronized的作用或者说一般用在什么场景?

原子性:确保线程互斥的访问同步代码

可见性:保证共享变量的修改能够及时可见。

有序性:有效解决指令重排问题。

说一下Synchronized的原理?

答:

  • 每个java对象都有一个与之相关联的监视器(monitor,底层在JVM中基于C++实现),监视器是一种内部锁或互斥锁。

  • 使用Synchronized可以获取对象的监视器锁,从而创建临界区(monitorenter和monitorexit包围的指令范围),确保在同一时刻只有一个线程能够进入执行。

    • 示例代码
public class Example {
    private Object lock = new Object();//

    public void synchronizedMethod() {
        synchronized (lock) {
            // 临界区,只有一个线程能够执行这里的代码
            // ...
        }
    }
}
  • 拓展
    • wait()、notify() 和 notifyAll() 方法与对象的监视器锁直接相关。只有线程持有了对象的监视器锁,才有资格调用这些方法,否则就会抛出java.lang.IllegalMonitorStateException FasfThreadLocal是Netty框架中的一个类,用于提供比标准‘ThreadLcoal’更快的线程本地变量支持。

Synchronized是如何进行锁升级的?

答:

  • 无状态锁

    • 初始状态,对象没有被任何线程锁定。当线程尝试进入synchronized块时,会尝试获取对象的锁。
  • 偏向锁(Biased Locking)

    • 在程序刚启动时,锁处于偏向锁状态。这时候,如果某个线程获取了锁,那么在一段时间内,该线程再次获取这个锁时,无需竞争,直接获得。这减少了锁竞争的开销。

    • 偏向锁通过记录获取锁的线程ID,如果有其他线程尝试获取该锁,则需要撤销偏向锁,升级为轻量级锁。

  • 轻量级锁(Lightweight Lock)

    • 当多个线程竞争同一个锁时,偏向锁就会升级为轻量级锁。轻量级锁使用CAS操作(Compare and Swap)来尝试获取锁,而不是直接阻塞线程。

    • 如果CAS操作失败,说明有竞争,这时候锁会升级为重量级锁。

  • 重量级锁(Heavyweight Lock)

    • 当锁升级到重量级锁时,会导致其他线程阻塞,只能等待持有锁的线程释放锁。

    • 重量级锁的实现使用操作系统提供的互斥量(Mutex)等机制,具有较大的性能开销。

  • 这种锁升级机制是为了在不同情况下权衡性能和资源占用。偏向锁适用于大多数情况下是单线程获取锁的场景,而轻量级锁和重量级锁适用于多线程竞争锁的情况。这样的设计可以在不同场景下提供更好的性能。

Synchronized是JVM层面还是JDK层面的锁?

答: synchronized是 Java 中的关键字,用于实现同步。它在 Java 中是基于监视器(Monitor)的概念实现的,因此可以说是在 JVM 层面提供的锁。

  • "JVM 层面锁"通常指的是在 Java 虚拟机(JVM)内部提供的锁机制
  • "JDK 层面锁"通常指的是在 Java 开发工具包(JDK)中提供的高级锁机制,这些锁位于 java.util.concurrent 包下

以上内容出自本人整理的面试秘籍。 链接: https://pan.baidu.com/s/1o014Ems8diV0D3h8K15olA?pwd=fi3x 提取码: fi3x 复制这段内容后打开百度网盘手机App,操作更方便哦

工作日每天更新,周末随缘更新。

请关注我,以便及时获取最新内容哦!

本文由 mdnice 多平台发布

标签:Synchronized,解锁,全攻略,获取,监视器,JVM,线程,轻量级
From: https://blog.csdn.net/zwsfamily/article/details/140851750

相关文章

  • 从入门到高手:场外期权的当代投资全攻略
    在这个快速变化的金融市场中,投资者们正在寻找新的投资工具来增强自己的投资组合。场外期权,作为一种灵活且功能强大的衍生品,已经成为当代投资者的新宠。期权圈将带你从基础概念出发,一步步深入了解场外期权,并探索如何让你从入门到高手。一、场外期权基础定义:场外期权,简称OTC(Ov......
  • Getty 携手英伟达升级商业文生图 AI 模型;苹果新专利探索「心跳」解锁 iPhone 丨 RTE
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编......
  • synchronized
    要想理解synchronized原理,必须要了解cas和用户态、内核态的理论synchronized是关键字,具体怎么实现要翻cpp、汇编代码,记住理论就行了CAS全称叫CompareAndSwap或者CompareAndSet,比较并交换、比较并设置。具体是:在执行操作之前,先比较当前内存中的值是否等于期望值,如......
  • 解锁开发新纪元:GPT-4o mini的实战探索与效率革命
    ......
  • BI 工具助力企业解锁数字化工厂,开启工业智能新视界
    背景在2022年公布的《“十四五”数字经济发展规划》中,政府不断增加对制造业数字化转型的政策支持力度,积极倡导制造企业采用最新技术,提升自动化、数字化和智能化水平。这一举措旨在强化国际竞争力,推动制造业由制造大国向制造强国转变。然而,在制造业数字化和智能化升级的过程中,......
  • 全新小体积RK3562核心板,解锁神秘技能!
    RK3562小体积金手指系列核心板基于瑞芯微四核Cortex-A53+Cortex-M0处理器设计,工作主频高达2GHz,最高搭载4GB高速LPDDR4、32GB eMMC。该核心板拥有204 Pin脚,尺寸仅为67.6mm *45mm,支持千兆网、USB3.0、串口、PCIE、HDMI等丰富外设资源,非常适合于高性能、高性价比的工业应用场景。......
  • 工单管理系统全攻略:找到你的完美匹配
    国内外主流的10款项目工单管理系统对比:PingCode、Worktile、浪潮云工单管理系统、华为企业智能工单系统、金蝶云·苍穹、紫光软件管理系统、Jira、Asana、ServiceNow、Smartsheet。在管理日益复杂的个人项目时,找到一款能够真正符合需求的管理软件,常常是许多人面临的难题。市面......
  • 【MySQL(锁篇)】深入MySQL锁机制:从全局到行级,解锁数据库性能瓶颈(上:MySQL锁介绍、表级锁
    文章目录MySQL(锁篇)-全局锁、表锁、行锁(记录锁、间隙锁、临键锁、插入意向锁)、意向锁、SQL加锁分析、死锁产生原因与排查一条Update语句MySQL锁介绍1锁分类2全局锁表级锁1什么是表级锁?2表读锁、写锁2.1表锁相关命令2.2表锁演示3元数据锁3.1元数据锁介绍3.2元......
  • 【MySQL(锁篇)】深入MySQL锁机制:从全局到行级,解锁数据库性能瓶颈(下:行锁分析实战、死锁原
    文章目录MySQL(锁篇)-全局锁、表锁、行锁(记录锁、间隙锁、临键锁、插入意向锁)、意向锁、SQL加锁分析、死锁产生原因与排查行锁分析实战1读已提交RC1.1组合一:ID是主键1.2组合二:ID唯一索引1.3组合三:ID非唯一索引1.4组合四:ID无索引2可重复读RR2.1组合五:ID主键2.2组......
  • 横竖屏切换,按home键,按返回键,锁屏与解锁屏幕,跳转透明Activity界面,启动一个 Theme
    A->B横竖屏切换:A走完ondestory才会走B的onCreate--会走pause按home键:本质上就是普通开B按返回键:也是开B但是会走关A锁屏与解锁屏幕:普通跳转透明Activity界面:会走pause但是不会走onstop启动一个Theme为Dialog的Activity:会onPause不会stop弹出Dialog时A......