轻量级锁轻在哪里?重量级锁重在哪里?
  4cUZdr0QxHGA 2023年11月02日 73 0


轻量级锁轻在哪里?重量级锁重在哪里?

重量级锁:我们知道,当要进入一个同步、线程安全的方法时,是需要先获得这个方法的锁的,退出这个方法时,则会释放锁。如果获取不到这个锁的话,意味着有别的线程在执行这个方法,这时我们就会马上进入阻塞的状态,等待那个持有锁的线程释放锁,然后再把我们从阻塞的状态唤醒,我们再去获取这个方法的锁。这种获取不到锁就马上进入阻塞状态的锁,我们称之为重量级锁。重点在于获取不到锁的线程,会一直处在等待状态,什么东西都做不了

  • 优点:线程竞争不使用自旋,不会消耗CPU。
  • 缺点:线程阻塞,响应时间缓慢。

轻量级锁:一般都是用自旋锁+CAS来实现的,我们可以定义自选的次数,到达这个次数后,我们就退出,不抢这个锁了,然后走对应的逻辑

  • 优点:竞争的线程不会阻塞,提高了程序的响应速度。
  • 缺点:如果始终得不到锁竞争的线程使用自旋会消耗CPU,因为执行CAS原语是要靠CPU的。

对比一下重量级锁和轻量级锁,可以得知一般情况下 重量级锁轻量级锁工作量更大消耗资源更多 并且 锁更慢。这也就是轻重之分。

不过并不是轻量级锁一定比重量级锁快

当线程数很多时,使用轻量级锁,就会加大某一个线程一直自选的概率,浪费时间和CPU资源。


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
4cUZdr0QxHGA