面试题答案
一键面试场景一:资源递归锁定
- 死锁原因:当一个线程在持有某个锁的情况下,又尝试再次获取同一把锁。例如,一个方法A中获取锁L1,然后在方法A内部调用了另一个方法B,而方法B也尝试获取锁L1,由于锁已经被当前线程持有,它在等待锁的释放,但它自身又不释放锁,从而造成死锁。
场景二:交叉锁
- 死锁原因:假设有两个线程T1和T2,以及两把锁L1和L2。T1获取了L1,T2获取了L2,然后T1尝试获取L2,T2尝试获取L1。此时,T1等待T2释放L2,T2等待T1释放L1,双方都在等待对方释放锁,形成死锁。