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();
}
}
我是线程的新手,需要了解锁定的以下属性。 我无法理解上面代码中重入的重要性。据说如果没有实施重新执行,上面的代码就会陷入僵局。
答案 0 :(得分:1)
当线程T
调用B.doSomething()
时,它将获得i
类型的实例B
的锁定。然后它调用super.doSomething()
,这需要在允许进入之前获得i
的锁定。因为T
已经获得了对i
的锁定,所以它可以在没有再次获得的情况下通过(这在它释放之前获得的锁之前是不可能的。)
如果线程T
已拥有必须获得的锁,则此行为自由通过,称为可重入锁。
也许你想阅读ReentrantLock的javadoc,它也解释了这个概念。