当前位置:首页 > 科技  > 软件

Synchronized的锁升级过程是什么样的

来源: 责编: 时间:2024-06-27 17:19:46 234观看
导读今天我们来和大家一起来一下关于这个锁的问题,为什么锁一直比较收到关注呢?因为在 Java 的锁机制能够保证安全,这时候有些朋友就会说,说线程安全,那么效率势必低下,很多时候就压根不需要使用,这说的也确实是对的,因为一般很多

今天我们来和大家一起来一下关于这个锁的问题,为什么锁一直比较收到关注呢?因为在 Java 的锁机制能够保证安全,这时候有些朋友就会说,说线程安全,那么效率势必低下,很多时候就压根不需要使用,这说的也确实是对的,因为一般很多开发在日常工作中,很少会使用到,但是呢,在面试的过程中,会经常性的问题,今天我们就来聊聊一个老生常谈的一个面试题,Synchronized 的锁的升级过程。5LM28资讯网——每日最新资讯28at.com

为什么需要锁

Java中的锁是一种同步机制,可以确保多个线程之间共享资源的互斥访问,从而避免出现数据竞争和线程安全问题。使用锁的主要目的是保证代码的正确性和可靠性。5LM28资讯网——每日最新资讯28at.com

Java中的锁能够解决以下实际问题:5LM28资讯网——每日最新资讯28at.com

  • 数据竞争:在多线程环境中,如果多个线程同时访问共享数据,就会产生数据竞争问题。使用锁可以确保同一时间只有一个线程可以访问共享资源,避免数据竞争和数据不一致的问题。
  • 线程安全:Java中的锁可以确保线程安全,避免多个线程之间的干扰和竞争,从而保证代码的正确性和可靠性。
  • 性能优化:Java中的锁可以用于优化程序的性能,比如使用读写锁来实现对数据的读写分离,从而提高程序的并发性能。
  • 死锁问题:Java中的锁可以用于避免死锁问题,比如使用一致性的加锁顺序,避免出现循环依赖的情况。

总之,Java中的锁机制是保证多线程并发安全的重要手段,可以用于解决数据竞争、线程安全、性能优化和死锁问题等实际问题。5LM28资讯网——每日最新资讯28at.com

Synchronized

synchronized是Java中的一个关键字,它提供了一种内置锁机制,用于确保多个线程在访问共享资源时的同步性。5LM28资讯网——每日最新资讯28at.com

使用方式

  • 修饰方法:直接在方法声明上加上synchronized关键字,表示整个方法是同步的。此时,锁是当前实例对象(对于非静态方法)或Class对象(对于静态方法)。
  • 修饰代码块:使用synchronized(object)来指定一个对象作为锁,只有持有该对象锁的线程才能进入synchronized块。这种方式可以更加灵活地控制需要同步的代码范围。

原理与特性

  • 互斥性:当一个线程进入由synchronized修饰的代码块或方法时,它会获取对象的锁,其他试图进入该代码块或方法的线程将被阻塞,直到锁被释放。这确保了同一时间只有一个线程可以执行synchronized保护的代码段。
  • 可重入性:对于同一个线程来说,synchronized块是可重入的,即一个线程可以多次获取同一个对象的锁。
  • 可见性:synchronized保证了内存可见性,即当一个线程修改了共享变量的值后,其他线程能够立即看到这个修改。这是通过JVM的内存屏障指令实现的,确保了在获取锁之前和释放锁之后,相关的内存操作会被刷新到主内存或从主内存重新读取。

Synchronized 锁的升级过程

在Java中,synchronized关键字的锁升级过程是一个动态的过程,旨在提高并发性能并减少线程之间的争用。这个过程从最初的无锁状态开始,根据线程对锁的争用情况,逐步升级到更高级别的锁状态。5LM28资讯网——每日最新资讯28at.com

我们来看一下他的升级过程:5LM28资讯网——每日最新资讯28at.com

无锁状态5LM28资讯网——每日最新资讯28at.com

对象刚被创建时,没有线程对其加锁,此时处于无锁状态。5LM28资讯网——每日最新资讯28at.com

偏向锁5LM28资讯网——每日最新资讯28at.com

  • 当第一个线程访问某个对象并尝试获取锁时,JVM会利用CAS(Compare-And-Swap)操作在对象的对象头(Mark Word)中记录下当前线程的ID和偏向锁标记位(通常设置为1)。
  • 如果下一次还是这个线程访问该对象,则只需要检查对象头中的线程ID是否与自己的ID相同,如果相同则直接获得锁,无需再进行CAS操作。这种情况下,锁就保持在偏向锁状态,整个过程几乎没有任何性能开销。
  • 如果在持有偏向锁期间,其他线程尝试访问该对象并获取锁,偏向锁会被撤销,并尝试升级为轻量级锁。

轻量级锁5LM28资讯网——每日最新资讯28at.com

  • 当偏向锁被撤销后,锁会升级到轻量级锁状态。
  • 在轻量级锁状态下,JVM会在当前线程的栈帧中创建一个锁记录(Lock Record),并将对象头中的Mark Word复制到该锁记录中,同时对象头中会有一个指针指向这个锁记录。
  • 当前线程会进入自旋(Spinning)状态,即不断尝试重新获取锁,而不是立即阻塞。自旋的目的是为了避免线程切换带来的性能开销,因为线程切换涉及到操作系统层面的操作,开销相对较大。
  • 如果自旋过程中成功获取到锁,则继续执行后续代码;如果自旋超过一定次数(通常是10次)仍未获取到锁,或者有其他线程参与锁竞争,则轻量级锁会膨胀为重量级锁。

重量级锁5LM28资讯网——每日最新资讯28at.com

  • 当轻量级锁无法满足并发需求时,锁会升级为重量级锁。
  • 在重量级锁状态下,如果当前线程未获取到锁,则会进入阻塞状态,等待其他线程释放锁。当锁被释放后,阻塞的线程会被唤醒并重新尝试获取锁。
  • 重量级锁的实现依赖于操作系统的互斥量(Mutex)或其他同步机制,因此涉及到用户态和内核态的切换,开销相对较大。

总结

  • synchronized的锁升级过程是从无锁状态开始,根据线程对锁的争用情况逐步升级到偏向锁、轻量级锁和重量级锁的过程。
  • 偏向锁和轻量级锁是JVM为了提高并发性能而引入的优化措施,它们可以减少线程切换带来的性能开销。
  • 重量级锁是当轻量级锁无法满足并发需求时的最终选择,它依赖于操作系统的同步机制来实现。

你对Synchronized的升级过程了解了么?5LM28资讯网——每日最新资讯28at.com


5LM28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-96992-0.htmlSynchronized的锁升级过程是什么样的

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Vue props的类型如果为对象或者数组,为什么默认值一定得是个函数

下一篇: 我们一起聊聊 Go 模块使用 GitLab subgroups 的问题

标签:
  • 热门焦点
  • 官方承诺:K60至尊版将会首批升级MIUI 15

    全新的MIUI 15今天也有了消息,在官宣了K60至尊版将会搭载天玑9200+处理器和独显芯片X7的同时,Redmi给出了官方承诺,K60至尊重大更新首批升级,会首批推送MIUI 15。也就是说虽然
  • 俄罗斯:将审查iPhone等外国公司设备 保数据安全

    iPhone和特斯拉都属于在各自领域领头羊的品牌,推出的产品也也都是数一数二的,但对于一些国家而言,它们的产品可靠性和安全性还是在限制范围内。近日,俄罗斯联邦通信、信息技术
  • 2023年Q2用户偏好榜:12+256G版本成新主流

    3月份的性能榜、性价比榜和好评榜之后,就要轮到2023年的第二季度偏好榜了,上半年的新机潮已经过去,最明显的肯定就是大内存和存储的机型了,另外部分中端机也取消了屏幕塑料支架
  • 摸鱼心法第一章——和配置文件说拜拜

    为了能摸鱼我们团队做了容器化,但是带来的问题是服务配置文件很麻烦,然后大家在群里进行了“亲切友好”的沟通图片图片图片图片对比就对比,简单对比下独立配置中心和k8s作为配
  • Flowable工作流引擎的科普与实践

    一.引言当我们在日常工作和业务中需要进行各种审批流程时,可能会面临一系列技术和业务上的挑战。手动处理这些审批流程可能会导致开发成本的增加以及业务复杂度的上升。在这
  • 谷歌KDD'23工作:如何提升推荐系统Ranking模型训练稳定性

    谷歌在KDD 2023发表了一篇工作,探索了推荐系统ranking模型的训练稳定性问题,分析了造成训练稳定性存在问题的潜在原因,以及现有的一些提升模型稳定性方法的不足,并提出了一种新
  • 这款新兴工具平台,让你的电脑效率翻倍

    随着信息技术的发展,我们获取信息的渠道越来越多,但是处理信息的效率却成为一个瓶颈。于是各种工具应运而生,都在争相解决我们的工作效率问题。今天我要给大家介绍一款效率
  • 小米公益基金会捐赠2500万元驰援北京、河北暴雨救灾

    8月2日消息,今日小米科技创始人雷军在其微博上发布消息称,小米公益基金会宣布捐赠2500万元驰援北京、河北暴雨救灾。携手抗灾,京冀安康!以下为公告原文
  • 华为开发者大会2023日程公开:开设鸿蒙HarmonyOS 4体验区

    IT之家 7 月 31 日消息,华为今日公布了 HDC.Together 开发者大会 2023 的详细日程。整场大会将于 8 月 4 日-6 日之间举行,届时将发布最新一代鸿蒙 H
Top