如题,当使用同一个对象锁时,理论上来说应该会进行锁的竞争,那为什么嵌套synchronized的时候不会发生死锁?
Object o = new Object();
Thread thread = new Thread(() -> {
synchronized (o){
System.out.println("1");
synchronized (o){
System.out.println("2");
}
System.out.println("3");
}
});
thread.start();
1
2
3
一个线程已经拥有某个对象的锁,再次申请的时候仍然会得到该对象的锁.也就是说synchronized获得的锁是可重入的
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!用一把锁锁住了以后,进不了里面锁的代码运行,所以不会产生死锁。