面试鸭 Java 后端面试题, Java 中 synchronized 的底层实现和锁的升降级机制是什么?
面试鸭 Java 后端面试题, Java 中 synchronized 的底层实现和锁的升降级机制是什么?
QA
Step 1
Q:: Java 中 synchronized 的底层实现是什么?
A:: 在 Java 中,synchronized 是一种同步机制,用于确保同一时刻只有一个线程可以执行被同步的代码块或方法。其底层实现依赖于 JVM(Java 虚拟机)中的对象头(Object Header)和监视器(Monitor)。对象头包含 Mark Word,其中存储了对象的哈希码、GC 信息和锁信息。当一个线程进入 synchronized 块时,会尝试获取对象的监视器,如果成功,则会修改对象头中的锁状态(Mark Word),指向当前线程持有的监视器。如果另一个线程尝试进入该同步块,则会被阻塞,直到第一个线程释放监视器。
Step 2
Q:: 锁的升降级机制是什么?
A:: 锁的升降级机制是指 Java 虚拟机在不同的并发场景下,为了提高锁的性能和降低开销而采用的一种优化策略。锁的状态主要包括:无锁(Unlocked)、偏向锁(Biased Locking)、轻量级锁(Lightweight Locking)和重量级锁(Heavyweight Locking)。
1. 偏向锁:当一个线程首次获得锁时,JVM 会将锁偏向于该线程,下次同一线程再次请求该锁时,可以直接进入同步块,而无需执行 CAS(Compare-And-
Swap)操作。
2.
轻量级锁:当偏向锁被另一个线程竞争时,偏向锁会被撤销,锁会升级为轻量级锁。轻量级锁通过使用 CAS 操作来避免线程阻塞。
3.
重量级锁:当轻量级锁的竞争激烈时,会升级为重量级锁,涉及操作系统的 Mutex 机制,线程会进入阻塞状态,直到锁被释放。
用途
面试这个内容的目的是评估候选人对 Java 并发机制的理解和掌握情况。这在实际生产环境中非常重要,特别是在多线程并发编程中。如果候选人能够深入理解 synchronized 的底层实现和锁的升降级机制,他们就能够编写出性能更高、更稳定的多线程应用程序,避免常见的并发问题如死锁、资源竞争等。尤其在高并发、高性能的服务器端开发中,这些知识是必不可少的。\n相关问题
🦆
什么是 CAS 操作?▷
🦆
什么是死锁?如何避免?▷
🦆
什么是 volatile 关键字?▷
🦆
什么是 ReentrantLock?与 synchronized 有什么区别?▷