JVM中的锁(下):粒度、分离和锁粗化

目录

锁分离

锁粗化

减少锁占有时间

减少锁粒度


      上两篇日志从锁的实现方面,总结了JVM对锁的一些实现和使用中膨胀的过程,从偏向锁、轻量级锁到自旋再到重量级锁,随着线程竞争越来越激烈,锁膨胀的也越来越厉害,不同锁的实现在不同场景下有它的优点和缺点,没错,在某些场景下,锁操作并不一定总能优化程序的,例如偏向锁在线程竞争激烈的场景下,需要不断变换自己的偏向状态,自旋锁在线程占用锁时间较长的场景下做的自旋操作通常是无用功,最后还是得不到锁,浪费了占用的CPU。所以,为了让程序执行的更加连贯,JVM还对锁做了一些优化。

锁分离

      以前多线程日志里总结过一种锁分离是读写分离锁,如果用synchronized内部锁或ReentrantLock重入锁,所有线程争夺一把锁,那么这些线程之间应该是串行一个接一个执行的,但是读线程因为不会对数据做修改,不需要等待写线程的执行完成后再去读数据,所以用锁分离实现读写线程的分离可以提高运行效率。除了读写分离锁外,Java提供了一个无界队列LinkedBlockingQueue,它的实现是链表形式,take()和put()两个方法分别向队列中获得数据和放入数据,这两个操作是线程安全的,实现方式也和读写分离锁类似,分别使用了takeLock和putLock。我们知道对于队列来说,数据的取出和录入是分别在表头和表尾两端进行的,先进先出嘛,所以take()操作和put&#

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值