028-86922220

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

Java并发编程—锁升级-创新互联

文章目录
————————————————————————————————————

创新互联是一家专业提供叙永企业网站建设,专注与网站建设、成都网站制作、H5高端网站建设、小程序制作等业务。10年已为叙永众多企业、政府机构等服务。创新互联专业网站建设公司优惠进行中。锁升级原理

synchronized锁升级原理:
在锁对象的对象头里面有一个threadid字段,在第一次访问的时候threadid为空, jvm 让其持有偏向锁,并将threadid 设置为其线程id,再次进入的时候会先判断。threadid是否与其线程id一致,如果一致则可以直接使用此对象,如果不一致,则升级偏向锁为轻量级锁,通过自旋循环一定次数来获取锁,执行一定次数之后,如果还没有正常获取到要使用的对象,此时就会把锁从轻量级升级为重量级锁!此过程就构成了synchronized锁的升级。

锁的升级的目的

锁的升级的目的:
锁升级是为了减低了锁带来的性能消耗。在Java 6之后优化 synchronized的实现方式,使用了偏向锁升级为轻量级锁再升级到重量级锁的方式,从而减低了锁带来的性能消耗。

锁的四种状态

上面讲到锁有四种状态,并且会因实际情况进行膨胀升级,其膨胀方向是:
无锁——>偏向锁——>轻量级锁——>重量级锁,并且膨胀方向不可逆。

偏向锁

一句话总结它的作用: 减少统一线程获取锁的代价。在大多数情况下,锁不存在多线程竞争,总是由同一线程多次获得,那么此时就是偏向锁。

轻量级锁重量级锁轻量级锁和重量级锁的对比偏向锁的设置 开启偏向锁的方式:

—个对象创建时:

自旋锁自旋多少次竞争不到后会升级到重量级锁?为什么有了自旋锁还需要重量级锁?

自旋是消耗cpu性能的,如果时间过长或者自旋线程过多,cpu会被大量消耗重量级锁中有队列waitSet

偏向锁是否一定比自旋锁效率高?

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网页题目:Java并发编程—锁升级-创新互联
链接分享:http://www.tsicrk.com/article/ccehsg.html

其他资讯

让你的专属顾问为你服务

1.7794s