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

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

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

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

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

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

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

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


阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6