返回顶部
首页 > 资讯 > 后端开发 > Python >什么是Java自旋锁
  • 152
分享到

什么是Java自旋锁

2024-04-02 19:04:59 152人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录1.自旋锁2.工作流程3.缺点4.实现原理5.自适应自旋前言: 阻塞或唤醒一个Java线程需要操作系统切换CPU状态来完成,这种状态转换需要耗费处理器时间。如果同步代码块中的内容

前言:

阻塞或唤醒一个Java线程需要操作系统切换CPU状态来完成,这种状态转换需要耗费处理器时间。如果同步代码块中的内容过于简单,状态转换消耗的时间有可能比用户代码执行的时间还要长。

1.自旋锁

在有些场景中,同步资源的锁定时间很短,为了这一小段时间去切换线程,线程挂起和恢复现场的花费可能会让系统得不偿失。

如果机器有多个CPU核心,能够让两个或以上的线程同时并行执行,我们就可以让后面那个请求锁的线程不放弃CPU的执行时间,看看持有锁的线程是否很快就会释放锁。

为了让当前线程“稍等一下”,我们需让当前线程进行自旋,如果在自旋完成后前面锁定同步资源的线程已经释放了锁,那么当前线程就可以不必阻塞而是直接获取同步资源,从而避免切换线程的开销。这就是自旋锁。

2.工作流程

3.缺点

自旋锁本身是有缺点的,它不能代替阻塞。自旋等待虽然避免了线程切换的开销,但它要占用处理器时间。

  • 如果锁被占用的时间很短,自旋等待的效果就会非常好;
  • 如果锁被占用的时间很长,那么自旋的线程只会白浪费处理器资源。

所以,自旋等待的时间必须要有一定的限度,如果自旋超过了限定次数没有成功获得锁,就应当挂起线程。(这个次数默认是10次,可以配置)

4.实现原理

自旋锁的实现原理同样也是CAS,AtomicInteger中调用unsafe进行自增操作的源码中的do-while循环就是一个自旋操作,如果修改数值失败则通过循环来执行自旋,直至修改成功。

public final int getAndAddInt (Object var1, Long var2, int var4) {
    int var5;
    do {
        var5 = this.getIntVolatile(var1, var2);
    } while( !this.compareAndSwapint(var1, var2, var5, var5 + var4));
    
    return var5;
}

5.自适应自旋

自适应意味着自旋的时间(次数)不固定,而是由前一次在同一个锁上的自旋时间及锁的拥有者的状态来决定。

  • 如果在同一个锁对象上,自旋等待刚刚成功获得过锁,并且持有锁的线程正在运行中,那么虚拟机就会认为这次自旋也是很有可能再次成功,进而它将允许自旋等待持续相对更长的时间。
  • 如果对于某个锁,自旋很少成功获得过,那在以后尝试获取这个锁时将可能省略掉自旋过程,直接阻塞线程,避免浪费处理器资源。

到此这篇关于什么是Java自旋锁的文章就介绍到这了,更多相关Java自旋锁内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 什么是Java自旋锁

本文链接: https://lsjlt.com/news/161465.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java自旋锁是什么
    这篇文章将为大家详细讲解有关Java自旋锁是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。前言:阻塞或唤醒一个Java线程需要操作系统切换CPU状态来完成,这种状态转换需要耗费处理器时间...
    99+
    2023-06-22
  • 什么是Java自旋锁
    目录1.自旋锁2.工作流程3.缺点4.实现原理5.自适应自旋前言: 阻塞或唤醒一个Java线程需要操作系统切换CPU状态来完成,这种状态转换需要耗费处理器时间。如果同步代码块中的内容...
    99+
    2024-04-02
  • java中自旋锁的原理是什么
    本篇文章给大家分享的是有关java中自旋锁的原理是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java可以用来干什么Java主要应用于:1. web开发;2. Andro...
    99+
    2023-06-14
  • java自旋锁和JVM对锁的优化详解
    目录背景好处AtomicLong的实现getAndIncrement方法实验缺点适用场景JVM对锁做了哪些优化?自适应的自旋锁锁消除锁粗化偏向锁/ 轻量级锁/ 重量级锁锁升级背景 先...
    99+
    2024-04-02
  • golang自旋锁怎么实现
    Golang中的自旋锁可以通过sync包中的Mutex类型来实现。Mutex类型提供了两个方法:Lock()用于获取锁,Unlock...
    99+
    2023-10-26
    golang
  • java中怎么实现可重入的自旋锁
    这篇文章主要介绍了java中怎么实现可重入的自旋锁的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇java中怎么实现可重入的自旋锁文章都会有所收获,下面我们一起来看看吧。说明是指试图获得锁的线程不会堵塞,而是通过...
    99+
    2023-06-30
  • Java中自旋锁的作用有哪些
    这篇文章将为大家详细讲解有关Java中自旋锁的作用有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。锁的优化:自旋锁当多个线程想同时访问同一个资源时,就存在资源冲突,这时,大家最直接想到的...
    99+
    2023-06-06
  • java锁是什么?
    锁是java并发编程中最重要的同步机制。JAVA中实现加锁是通过Synchronized关键字以及java.util.concurrent包下的相关类。Java中锁的概念自旋锁 : 是指当一个线程在获取锁的时候,如果锁已经被其他线程获取,那...
    99+
    2019-11-15
    java教程 java
  • Linux中自旋锁Spinlock怎么把Ubuntu弄死锁
    这篇文章给大家分享的是有关Linux中自旋锁Spinlock怎么把Ubuntu弄死锁的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。背景由于在多处理器环境中某些资源的有限性,有时需要互斥访问(mutual &nbs...
    99+
    2023-06-15
  • 怎么在java中实现一个可重入的自旋锁
    怎么在java中实现一个可重入的自旋锁?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. ...
    99+
    2023-06-14
  • Golang自旋锁的相关介绍
    目录自旋锁golang实现自旋锁可重入的自旋锁和不可重入的自旋锁自旋锁的其他变种1. TicketLock2. CLHLock3. MCSLock4. CLHLock 和 MCSLo...
    99+
    2024-04-02
  • SQL Server中怎么实现一个自旋锁
    这期内容当中小编将会给大家带来有关SQL Server中怎么实现一个自旋锁,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。为什么我们需要自旋锁?用闩锁同步多个线程间数据结构...
    99+
    2024-04-02
  • java中的锁是什么
    锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源。Java中的锁主要有以下几种概念:同步锁  同一时刻,一个同步锁只能被一个线程访问。以对象为依据,通过synchronized关键字来进行同步,实现对...
    99+
    2018-10-05
    java基础 java
  • java中什么是死锁
    java中什么是死锁?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客户端开发;4. ...
    99+
    2023-06-14
  • Java的15种锁是什么
    这篇文章主要讲解了“Java的15种锁是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java的15种锁是什么”吧!   Java 中15种锁的介绍 ...
    99+
    2024-04-02
  • 什么叫自锁
    自锁是一种编程技术,用于确保在多线程环境下对共享资源的安全访问,通过加锁和解锁操作,可以确保在多线程环境下对共享资源的安全访问,自锁的使用需要谨慎,避免潜在的问题,并根据具体情况选择合适的同步机制。本教程操作系统:Windows10系统、D...
    99+
    2023-08-17
  • java中锁的概念是什么
    java中锁的概念是什么?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。python有哪些常用库python常用的库:1.requesuts;2.scrapy;3.pillow;...
    99+
    2023-06-14
  • Java中的锁机制是什么
    今天小编给大家分享一下Java中的锁机制是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Java中的锁机制是保证多线程并...
    99+
    2023-07-05
  • Java 中什么是无锁编程
    无锁编程是指在并发编程中,通过使用非阻塞的算法和数据结构来避免使用锁来实现线程同步和数据访问控制的一种编程方式。在传统的并发编程中,...
    99+
    2023-10-12
    Java
  • Java中的15种锁是什么
    这篇“Java中的15种锁是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java中的15种锁是什么”文章吧。公平锁 /...
    99+
    2023-06-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作