public class A
{
public synchronized void doSomething()
{
System.out.println("Class A");
}
}
public class B extends A
{
public synchronized void doSomething()
{
System.out.println("Class B");
super.doSomething();
}
}
我是线程新手,需要了解以下锁定属性。 我无法理解上面代码中可重入的意义。据说如果不实现重入,上面的代码就会死锁。
最佳答案
当线程T
调用B.doSomething()
时,它将获得B<类型的实例
。然后它调用 i
的锁super.doSomething()
,它需要在允许进入之前获得 i
上的锁。因为 T
已经获得了 i
的锁,所以它可能会通过而无需再次获得它(这在它释放之前获得的锁之前是不可能的)。
如果线程 T
已经拥有他必须获得的锁,则这种自由 channel 行为称为可重入锁。
也许您想阅读 ReentrantLock 的 javadoc这也解释了这个概念。
关于java - 具有重写方法的可重入锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43861478/