美文网首页
30.自旋与阻塞

30.自旋与阻塞

作者: 段段小胖砸 | 来源:发表于2021-10-22 09:28 被阅读0次

do-while循环直到判断条件返回true为止。该操作称为自旋。

当一个线程拿不到锁的时候,有以下两种基本的等待策略:

  • 策略1:放弃CPU,进入阻塞状态,等待后续被唤醒,再重新被操作系统调度。
  • 策略2:不放弃CPU,空转,不断重试,也就是所谓的“自旋”。

很显然,如果是单核的CPU,只能用策略1。因为如果不放弃CPU,那么其他线程无法运行,也就无法释放锁。但对于多CPU或者多核,策略2就很有用了,因为没有线程切换的开销。

AtomicInteger的实现就用的是“自旋”策略,如果拿不到锁,就会一直重试。

注意:以上两种策略并不互斥,可以结合使用。如果获取不到锁,先自旋;如果自旋还拿不到锁,再阻塞,synchronized关键字就是这样的实现策略。

除了AtomicInteger,AtomicLong也是同样的原理。

相关文章

  • 30.自旋与阻塞

    do-while循环直到判断条件返回true为止。该操作称为自旋。 当一个线程拿不到锁的时候,有以下两种基本的等待...

  • Java锁的优化

    一、自旋锁与自适应自旋(Adaptive Spinning) 自旋锁:由于线程阻塞会引起性能的压力,频繁挂起和恢复...

  • 自旋锁

    1. 什么是自旋锁 自旋锁与互斥锁有点类似,但是自旋锁不会引起调用者阻塞,如果自旋锁已经被别的执行单元保持,调用者...

  • 自旋锁(spin lock)与互斥量(mutex)的比较

    自旋锁(spin lock)与互斥量(mutex)的比较 自旋锁是一种非阻塞锁,也就是说,如果某线程需要获取自旋锁...

  • JAVA锁

    概述 JAVA的锁大致可以分为自旋锁和阻塞锁,自旋锁就是拿不到锁就不断循环尝试去拿,阻塞锁是如果拿不到锁线程就阻塞...

  • JVM之锁优化

    1、自旋锁与自适应自旋 互斥同步对性能最大的影响是阻塞的实现,挂起线程和恢复线程的操作都需要转入内核态中完成,这些...

  • 锁优化

    自旋锁与自适应自旋 同步互斥对性能最大的影响是阻塞的实现,挂起和恢复线程的操作都需要转入内核态中完成,这些操作带来...

  • 二、线程同步

    回到主目录1、阻塞同步1.1、Join1.2、自旋+阻塞2、锁同步2.1、lock2.2、Monitor2.3、死...

  • 万字长文!从底层开始带你了解并发编程,彻底帮你搞懂java锁!

    线程是否要锁住同步资源 锁住 悲观锁 不锁住 乐观锁 锁住同步资源失败 线程是否要阻塞 阻塞 不阻塞自旋锁,适应性...

  • java锁《一》

    其实如果按照名称来说,锁大概有以下名词:自旋锁 ,自旋锁的其他种类,阻塞锁,可重入锁 ,读写锁 ,互斥锁 ,悲观锁...

网友评论

      本文标题:30.自旋与阻塞

      本文链接:https://www.haomeiwen.com/subject/uzkfaltx.html