课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
锁的应用是程序员在学习软件开发的时候需要重点掌握的一个编程技术,而今天我们就通过案例分析来了解一下,线程安全都有哪些常见锁类型。
自旋锁与自适应自旋锁
一个线程在等待锁的时候并不放弃处理器时间,而是执行一个忙循环,等待其他线程释放锁,这就是所谓的自旋锁。自旋是会占用处理器资源的,但是自旋锁有可能节省线程挂起和恢复的开销,如果锁能够很快获取到,那么自旋锁是非常有意义的,如果大部分情况下无法在自旋的情况下获取到锁,那么依然要进行线程的挂起,及之后的恢复,这样比直接挂起和恢复增加了自旋的开销。
自适应自旋是指虚拟机根据之前的经验判断自旋等待能否获取到锁,如果可以,根据以往的经验,需要自旋多少次,一次来调整自旋的次数。如果在获取某个锁的历史记录上,自旋等待从未成功过,那么以后将省略自旋过程,以避免浪费处理器资源,直接挂起等待。
锁消除
锁消除是指虚拟机即时编译器运行时,对一些代码上要求同步,但是被检测到不可能存在共享数据竞争的锁进行消除。
偏向锁
如果说轻量级锁是在无竞争的情况下使用CAS操作去消除同步使用的互斥量,那偏向锁就是在无竞争的情况下把整个同步都消除掉,连CAS操作都不做了。
当锁对象一次被线程获取的时候,虚拟机将会把对象头中的标志位设为“01”,即偏向模式,同时使用CAS操作把获取这个锁的线程ID记录到对象的MarkWord中,如果CAS成功了,持有偏向锁的线程以后每次进入这个锁相关的同步块时,虚拟机都可以不再进行任何同步操作。
助力2021高薪就业,Java实战项目来袭!林森老师带你重温经典,从Java角度解析坦克大战游戏~教你用键盘监控事件控制坦克移动、子弹发射等!原价499元,限时9.9元购买,邀请好友学习还可获得现金红包!上不封顶~
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请在707945861群中学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。