使用覆盖方法重入锁定?

时间:2017-05-09 04:59:41

标签: java locking java-threads

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();
    }
}

我是线程的新手,需要了解锁定的以下属性。 我无法理解上面代码中重入的重要性。据说如果没有实施重新执行,上面的代码就会陷入僵局。

1 个答案:

答案 0 :(得分:1)

当线程T调用B.doSomething()时,它将获得i类型的实例B的锁定。然后它调用super.doSomething(),这需要在允许进入之前获得i的锁定。因为T已经获得了对i的锁定,所以它可以在没有再次获得的情况下通过(这在它释放之前获得的锁之前是不可能的。)

如果线程T已拥有必须获得的锁,则此行为自由通过,称为可重入锁。

也许你想阅读ReentrantLock的javadoc,它也解释了这个概念。