美文网首页
Java自旋锁和自适应自旋

Java自旋锁和自适应自旋

作者: cbhe | 来源:发表于2020-05-25 21:25 被阅读0次

java程序的每个线程都是跟物理机的内核态线程是一一对应的。因此线程的挂起和恢复都需要转入内核态来完成。因此java线程阻塞的实现实际上就是对java多线程互斥同步性能影响最大的地方。

问题:线程同步非常消耗资源,尤其是线程阻塞
可行方案:能否让线程在等待锁的时候不阻塞,而是轮询检查锁是否可用

在某些情况下,轮询检查确实比线程阻塞更加划算。例如,许多时候当前线程等待一个很短的时间就可以获得锁,这时就可以不挂起而是轮询一会。但轮询是要占用cpu资源的,所以轮询的时间不能太长,否则这段时间内线程什么都没做还浪费了cpu资源,肯定不划算。

问题:虽然有时候使用轮询可以避免阻塞减少资源浪费,但是如何设置轮询的时间呢?太短不行,太长也不行。
可行方案:让虚拟机来做个统计。然后自适应应用自旋。

如果过去一段时间等待某个锁所需的时间都很短,那么就把这个锁等待的方式从阻塞改为自旋。如果自旋获取锁的成功率不高,那就直接改成阻塞方式吧,毕竟每次自旋都是存粹浪费cpu。

相关文章

  • Java锁的优化

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

  • Java自旋锁和自适应自旋

    java程序的每个线程都是跟物理机的内核态线程是一一对应的。因此线程的挂起和恢复都需要转入内核态来完成。因此jav...

  • 关于自旋锁

    自旋锁是什么? spinlock,不断的自旋(自我循环)尝试获得锁。参考文档:Java中的自旋锁 自旋锁的实现 自...

  • Java锁优化

    自旋锁与自适应自旋 在Java程序中锁的持有一般只会持续很短的时间,挂起和恢复线程都会产生性能损耗,让线程执行一个...

  • 13.3 锁优化

    1. 自旋锁与自适应自旋。共享数据的锁定只会持续短时间,通过自旋看看持有锁的线程是否会很快释放。1.6之后加入自适...

  • JVM对锁的优化

    自旋锁和自适应自旋锁 为何引入 互斥同步最大的性能消耗在于阻塞的实现。即线程的挂起和唤醒必须转入内核态中实现,线程...

  • 一文讲解重量级锁、自旋锁、轻量级锁、偏向锁、悲观、乐观锁等各种锁

    重量级锁?自旋锁?自适应自旋锁?轻量级锁?偏向锁?悲观锁?乐观锁?执行一个方法咋这么辛苦,到处都是锁。 今天这篇文...

  • CLH并发队列

    1 什么是自旋锁和互斥锁? 由于CLH锁是一种自旋锁,那么我们先来看看自旋锁是什么? 自旋锁说白了也是一种互斥锁,...

  • iOS 开发中加锁

    [1].OSSpinLock 自旋锁 [1]自旋锁与互斥锁有点类似,只是自旋锁不会引起调用者睡眠,如果自旋锁已经被...

  • JAVA锁

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

网友评论

      本文标题:Java自旋锁和自适应自旋

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