1、自旋锁
自旋锁可以使线程在没有取得锁的时候,不被挂起,而转去执行一个空循环,(即所谓的自旋,就是自己执行空循环),若在若干个空循环后,线程如果可以获得锁,则继续执行。若线程依然不能获得锁,才会被挂起。
使用自旋锁后,线程被挂起的几率相对减少,线程执行的连贯性相对加强。因此,对于那些锁竞争不是很激烈,锁占用时间很短的并发线程,具有一定的积极意义,但对于锁竞争激烈,单线程锁占用很长时间的并发程序,自旋锁在自旋等待后,往往毅然无法获得对应的锁,不仅仅白白浪费了CPU时间,最终还是免不了被挂起的操作 ,反而浪费了系统的资源。
在JDK1.6中,Java虚拟机提供-XX:+UseSpinning参数来开启自旋锁,使用-XX:PreBlockSpin参数来设置自旋锁等待的次数。
在JDK1.7开始,自旋锁的参数被取消,虚拟机不再支持由用户配置自旋锁,自旋锁总是会执行,自旋锁次数也由虚拟机自动调整。

可能引起的问题:
1.过多占据CPU时间:如果锁的当前持有者长时间不释放该锁,那么等待者将长时间的占据cpu时间片,导致CPU资源的浪费,因此可以设定一个时间,当锁持有者超过这个时间不释放锁时,等待者会放弃CPU时间片阻塞;
2.死锁问题:试想一下,有一个线程连续两次试图获得自旋锁(比如在递归程序中),第一次

自旋锁、阻塞锁、可重入锁、悲观锁、乐观锁、读写锁、偏向所、轻量级锁、重量级锁、锁膨胀、对象锁和类锁相关推荐

  1. java 并发锁_Java并发教程–重入锁

    java 并发锁 Java的synced关键字是一个很棒的工具–它使我们可以通过一种简单可靠的方式来同步对关键部分的访问,而且也不难理解. 但是有时我们需要对同步进行更多控制. 我们要么需要分别控制访 ...

  2. 锁-概念:可重入锁、可中断锁、公平锁、读写锁

    可重入锁 指的是在同一个thread中,获取锁之后再次使用同样的方法或对象中的其他方法可以直接操作,而不需要重新获取锁.它是基于thread粒度的,per-thread. 不可重入锁 指的是每次使用锁 ...

  3. Redis核心数据结构List应用场景-商品列表、缓存击穿、PV阅读量、抢红包、推送帖子、普通分布式锁、Redis可重入锁与红锁

    List应用场景 Redis之List 一. Redis list命令实战 二.商品列表 高并发的淘宝聚划算实现技术方案 SpringBoot+Redis实现商品列表功能 二.缓存击穿 什么是缓存击穿 ...

  4. 可重入锁-synchronized是可重入锁吗?

    目录 前言 1.什么是可重入锁呢? 2.自己写代码验证下可重入和不可重入 3.自己如何实现一个可重入和不可重入锁呢 4.ReentrantLock如何实现可重入的 5.可重入锁的特点 前言 面试题:s ...

  5. 可重入锁与非可重入锁

    文章目录 锁的分类 什么是可重入锁 测试lock 锁的可重入性 不可重入锁 锁的分类 什么是可重入锁 可重入锁又名递归锁,是指在同一个线程在外层方法获取锁的时候,再进入该线程的内层方法会自动获取锁(前 ...

  6. redis分布式锁之redisson可重入锁

    1.上篇讲了java里使用setNX实现redis分布式锁,可是这种方法还是有很多弊端的,追求完美的做法可以使用redisson来实现分布式锁,如下: 2.Redisson 是 java 的 Redi ...

  7. java dom4j读写锁,java锁的深度化-重入锁,读写锁,乐观锁,悲观锁

    1.重入锁 目的:避免死锁的现象 锁作为并发共享数据,保证一致性的工具,在java平台有多种实现synchronized(重量级)和ReentrantLock(轻量级)等等,这些已经写好提供的锁为我们 ...

  8. 什么是可重入锁?为什么需要可重入锁?

    可重入锁,从字面来理解,就是可以重复进入的锁. 可重入锁,也叫做递归锁,指的是同一线程外层函数获得锁之后,内层递归函数仍然有获取该锁的代码,但不受影响. 在JAVA环境下ReentrantLock和s ...

  9. java重入锁,再探JAVA重入锁

    之前的文章中简单的为大家介绍了重入锁JAVA并发之多线程基础(2).这里面也是简单的为大家介绍了重入锁的几种性质,这里我们就去探索下里面是如何实现的. 我们知道在使用的时候,必须锁先有定义,然后我们再 ...

  10. java 线程的可重入锁_java 多线程-可重入锁

    可重入锁:锁可以连续使用 计数器+判断进入的线程是不是已经锁定的线程,如果是那就不用等待,直接使用 public class my { public static void main(String[] ...

最新文章

  1. python脚本如何监听终止进程行为,如何通过脚本名获取pid
  2. 使用思维导图,优雅的完成自己的代码
  3. linux 设计与实现 pdf,Linux库的设计与实现.pdf
  4. 软考考前冲刺第十三章UML建模
  5. python做插件应用_Python插件机制实现详解
  6. 【Arduino】开发入门教程【六】数据类型转换函数
  7. Java虚拟机--------JVM常见参数
  8. 华为Mate 30 Pro前面板曝光:双曲面设计 几乎全是屏
  9. Linux 进程间通讯(IPC)方式 ------- 共享内存
  10. 60页5G+智慧农业大数据 2022
  11. 神经网络发展的五个阶段,神经网络发展历程
  12. win7系统声卡驱动安装失败怎么办--win7w.com
  13. 五、BD09(百度坐标系)
  14. linux常用网站(不定期更新)
  15. Angular判断对象不否为空的方法
  16. 你还在观望吗?Creator3D小鲜肉《小鸭快跑》新鲜出炉!
  17. lichee目录+android源码目录制作ROM
  18. 你也许不知道的5个微信小技巧
  19. 什么是seo优化?网站seo如何优化
  20. 性能服务器800,IBM企业存储服务器 ESS800 Global Mirror ®( 异步PPRC)性能研究

热门文章

  1. 迅雷启动慢 解决方法
  2. 校园宽带客户端认证程序无法继续初始化绑定通信接口网络地址失败_解决办法
  3. 学习系列--最优学习内容选择
  4. mybatispuls中IService查询条件的使用(适用于单表查)
  5. Android高性能日志模块-Xlog 正篇
  6. 外汇汇率接口 java_基于java的货币汇率接口调用代码实例
  7. BP神经网络之鸢尾花
  8. 漫谈TCP新算法Elastic-TCP
  9. ROS到ROS2的多节点组合运行
  10. 参考答案-数据库原理测试一