轻量级锁为什么要升级成重量级锁
时间: 2023-11-14 10:56:49 浏览: 103
Java锁的升级策略 偏向锁 轻量级锁 重量级锁
5星 · 资源好评率100%
轻量级锁和重量级锁是Java中用于实现线程同步的两种机制。
轻量级锁是为了解决线程竞争情况下的性能问题而设计的。它的核心思想是使用CAS操作来尝试获取锁,如果成功则表示线程获取到了锁,如果失败则会进入自旋状态,不断尝试获取锁。在多线程竞争不激烈的情况下,轻量级锁能够提供较好的性能,因为自旋等待的时间很短。但是当线程竞争激烈时,自旋等待的时间会变得很长,这样会浪费CPU资源。
重量级锁是为了解决线程竞争激烈情况下的性能问题而设计的。它的核心思想是使用操作系统的互斥量(Mutex)来实现线程的阻塞和唤醒,当一个线程无法获取到锁时,它会被阻塞,并被放入到等待队列中。当锁释放时,等待队列中的线程会被唤醒并争抢锁。重量级锁通过阻塞线程来降低线程竞争时的资源消耗,但是阻塞和唤醒线程需要操作系统的支持,会涉及到用户态和内核态之间的切换,开销较大。
所以当线程竞争激烈时,使用轻量级锁可能会造成较大的性能损失,因为自旋等待时间长,而不断地占用CPU资源。而使用重量级锁可以避免线程自旋等待,减少了CPU资源的浪费。
相关问题:
1. 轻量级锁和重量级锁在实现上有什么区别?
2. 在什么情况下会发生轻量级锁的升级?
3. 除了轻量级锁和重量级锁,Java还有哪些线程同步机制?
阅读全文