一个线程需要同时获取多把锁,这时就容易发生死锁
t1 线程 获得lockA对象锁,接下来想获取lockB对象 的锁 t2 线程 获得lockB对象 锁,接下来想获取 lockA对象 的锁例:
@Slf4j
public class TestDealLock {
public static void main(String[] args) {
Object lockA = new Object();
Object lockB = new Object();
new Thread(()->{
synchronized (lockA){
log.debug("获取lockA");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
log.debug("尝试获取lockB");
synchronized (lockB){
log.debug("获取lockB");
}
}
},"t1").start();
new Thread(()->{
synchronized (lockB){
log.debug("获取lockB");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
log.debug("尝试获取lockA");
synchronized (lockA){
log.debug("获取lockA");
}
}
},"t2").start();
}
}
测试结果:
一般在锁套锁时很有很能会发生死锁。