网站建设唯美谷网站,怎么建设网站最便宜,755权限 wordpress,国外的购物网站有哪些点个关注#xff0c;必回关 文章目录自旋锁#xff1a;自适应锁#xff1a;锁消除#xff1a;锁粗化#xff1a;偏向锁#xff1a;轻量级锁#xff1a;从JDK1.6版本之后#xff0c;synchronized本身也在不断优化锁的机制#xff0c;有些情况下他并不会是一个很重量级的…点个关注必回关
文章目录自旋锁自适应锁锁消除锁粗化偏向锁轻量级锁从JDK1.6版本之后synchronized本身也在不断优化锁的机制有些情况下他并不会是一个很重量级的锁了。优化机制包括
自适应锁、
自旋锁、
锁消除、
锁粗化、
轻量级锁和
偏向锁。锁的状态从低到高依次为 无锁-偏向锁-轻量级锁-重量级锁升级的过程就是从低到高降级在 一定条件也是有可能发生的。
自旋锁
由于大部分时候锁被占用的时间很短共享变量的锁定时间也很短所有没有必要挂起 线程用户态和内核态的来回上下文切换严重影响性能。自旋的概念就是让线程执行一个忙循环 可以理解为就是啥也不干防止从用户态转入内核态自旋锁可以通过设置-XX:UseSpining来开 启自旋的默认次数是10次可以使用-XX:PreBlockSpin设置。
自适应锁
自适应锁就是自适应的自旋锁自旋的时间不是固定时间而是由前一次在同一个锁上 的自旋时间和锁的持有者状态来决定。
锁消除
锁消除指的是JVM检测到一些同步的代码块完全不存在数据竞争的场景也就是不需要 加锁就会进行锁消除。
锁粗化
锁粗化指的是有很多操作都是对同一个对象进行加锁就会把锁的同步范围扩展到整个操 作序列之外。 阿里内部资料
偏向锁
当线程访问同步块获取锁时会在对象头和栈帧中的锁记录里存储偏向锁的线程ID之后 这个线程再次进入同步块时都不需要CAS来加锁和解锁了偏向锁会永远偏向第一个获得锁的线 程如果后续没有其他线程获得过这个锁持有锁的线程就永远不需要进行同步反之当有其他 线程竞争偏向锁时持有偏向锁的线程就会释放偏向锁。可以用过设置-XX:UseBiasedLocking开 启偏向锁。
轻量级锁
JVM的对象的对象头中包含有一些锁的标志位代码进入同步块的时候JVM将会使用 CAS方式来尝试获取锁如果更新成功则会把对象头中的状态位标记为轻量级锁如果更新失败 当前线程就尝试自旋来获得锁。 整个锁升级的过程非常复杂我尽力去除一些无用的环节简单来描述整个升级的机制。 简单点说偏向锁就是通过对象头的偏向线程ID来对比甚至都不需要CAS了而轻量级锁主要就 是通过CAS修改对象头锁记录和自旋来实现重量级锁则是除了拥有锁的线程其他全部阻塞。 谢谢观看