首页 > 其他分享 >多线程锁的升级原理是什么

多线程锁的升级原理是什么

时间:2024-11-11 15:58:03浏览次数:5  
标签:升级 线程 轻量级 自旋 原理 多线程 重量级 偏向

  

锁的级别:无锁 => 偏向锁 => 轻量级锁 => 重量级锁

 

无锁:没有对资源进行锁定,所有线程都可以访问,但是只有一个线程能成功修改资源,其他的线程会不断尝试,直至修改成功。  

 

偏向锁:偏向锁是指当一个线程访问同步块并获取锁时,会在对象头和栈帧中的锁记录里存储线程ID。一旦该线程再次进入同步块,无需再次获取锁,只需检查对象头的标记位即可。

 

偏向锁的撤销:当有其他线程尝试竞争偏向锁时,偏向锁会被撤销,升级为轻量级锁。撤销过程需要在安全点(Safe Point)进行,确保没有字节码正在执行。  

 

轻量级锁:轻量级锁是指当锁是偏向锁的时候,被第二个线程 B 所访问,此时偏向锁就会升级为轻量级锁,线程 B 会通过自旋的形式尝试获取锁,线程不会阻塞,从而提高性能。当前只有一个等待线程,则该线程将通过自旋进行等待。但是当自旋超过一定的次数时,轻量级锁便会升级为重量级锁;当一个线程已持有锁,另一个线程在自旋,而此时又有第三个线程来访时,轻量级锁也会升级为重量级锁。

 

重量级锁:指当有一个线程获取锁之后,其余所有等待获取该锁的线程都会处于阻塞状态。 重量级锁会导致线程上下文切换,开销较大。

 

锁的降级:JVM 并不支持锁的降级,即一旦锁升级为重量级锁,就不会再降级为轻量级锁或偏向锁。锁的升级是单向的,不可逆的。

 

总结

无锁:适用于读多写少的场景,或者对性能要求极高的场景。

偏向锁:适用于单个线程长时间持有锁的场景。

轻量级锁:适用于锁竞争不激烈的场景,通过自旋减少线程切换的开销。

重量级锁:适用于锁竞争激烈或锁持有时间较长的场景,确保线程的安全性和互斥性。

  

标签:升级,线程,轻量级,自旋,原理,多线程,重量级,偏向
From: https://www.cnblogs.com/2324hh/p/18539933

相关文章

  • 多线程锁的升级原理是什么
      锁的级别:无锁=>偏向锁=>轻量级锁=>重量级锁 无锁:没有对资源进行锁定,所有线程都可以访问,但是只有一个线程能成功修改资源,其他的线程会不断尝试,直至修改成功。  偏向锁:偏向锁是指当一个线程访问同步块并获取锁时,会在对象头和栈帧中的锁记录里存储线程ID。一旦该......
  • ag——ack 的升级版,C语言编写,更快更人性化
    转自于:https://github.com/jaywcjlove/linux-command,后不赘述agack的升级版,C语言编写,更快更人性化补充说明摘自https://github.com/ggreer/the_silver_searcher项目的Readme.md它比ack快一个数量级。它忽略了你的.gitignore和.hgignore中的文件模式。如果你的......
  • 程序员如何借势AI提高自己:从高效工作到技能升级的全面指南
    又是一年1024,时光荏苒,转眼又到了这个特别的日子。坦白说,这篇文章我其实并不太想写,因为我并没有通过AI找到普适于程序员群体的高效赚钱秘籍。然而,反思过去的工作,我发现利用AI的确让我在工作中变得更加灵活,也因此有了更多时间去思考其他问题。因此,我希望能够分享一些我在使用AI过程......
  • 【多线程】---1115. 交替打印 FooBar
     解法1:condition_variable + mutex classFooBar{private:intn;mutexmtx;condition_variablecv;boolfoo_done=false;public:FooBar(intn){this->n=n;}voidfoo(function<void()>printFoo)......
  • 千兆反射内存卡的技术原理与优势
    在当今数字化的快节奏世界中,数据的快速、准确和实时传输已成为各行各业成功的关键。反射内存卡,作为一种尖端的数据传输解决方案,以其独特的性能和广泛的应用前景,正在引领行业的变革。本文将深入探讨千兆反射内存卡的应用领域及其发展前景,揭示这一技术如何为各行各业带来前所未有......
  • 计算机组成原理之超标量和动态流水线的基本概念
    1.超标量的基本概念定义:超标量(superscalar)CPU架构是指在一颗处理器内核中实行了指令级并行的一类并行运算。这种技术能够在相同的CPU主频下实现更高的CPU吞吐率(throughput)。应用背景:随着处理器技术的不断发展,为了提高处理器的性能,需要处理器具有每个周期能发射执行多条指......
  • unity项目托管代码和非托管代码之间的数据传递原理刨析
    Unity3D架构Unity3D是一个广泛使用的游戏引擎,支持多种平台的游戏开发。它的架构主要由两部分组成:非托管代码(UnmanagedCode):这部分主要是用C++编写的,负责引擎的底层功能,如图形渲染、物理计算、音频处理等。非托管代码直接与操作系统和硬件交互,通常具有更高的性能,但开......
  • GFPS技术原理(三)广播信息
    我们知道GFPS有两个角色,Provider用于发送广播,然后Provider的广播数据在BR/EDR处于配对模式和非配对模式两种不同情况下,广播数据也是不尽相同,下面来做分析:配对模式:广播频率:处于配对模式下,Provideradvertisinginterval必须不超过100ms,也就是最少要一秒发送10次广播,这样......
  • 鸿蒙Next系统中的随机数生成:从Crypto Architecture Kit看加密原理
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。在当今数字化浪潮汹涌澎湃的时代,信息安......
  • AUTOSAR CP Ethernet State Manager(EthSM)规范的主要功能以及工作原理导读
    AUTOSAREthernetStateManager(以下简称EthSM)规范的主要功能AUTOSAREthernetStateManager(以下简称EthSM)规范的主要功能包括:通信控制网络模式管理:为通信管理器(ComM)提供API,用于请求以太网网络的通信模式,如ETHSM_FULL_COMMUNICATION(全通信)、ETHSM_SILENT_COMMUNICATIO......