java - 具有重写方法的可重入锁?

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

我是线程新手,需要了解以下锁定属性。 我无法理解上面代码中可重入的意义。据说如果不实现重入,上面的代码就会死锁。

最佳答案

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

如果线程 T 已经拥有他必须获得的锁,则这种自由 channel 行为称为可重入锁。

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

关于java - 具有重写方法的可重入锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43861478/

相关文章:

java - 如何在 keyTyped 事件发生时更改 JButton 颜色?

windows - lockfileex 不会阻止 create_always 删除文件

java - Java中如何通知特定线程

JavaFX 使用线程更快地动态填充 GridPane

java - 使用 HTTP Java 客户端执行异步请求时如何处理错误?

java - 如何将组件插入到 JTextPane,一个从左侧,其他从右侧

MySql 错误 > 超过锁定等待超时;尝试重新启动事务 SQLState : 41000 VendorError: 1205

java - 我想通过多线程将此函数作为列表中所有值的线程执行,请指导我

java - ListView 问题,使用 List 而不是 Array

sql-server - 为什么行级锁定在 SQL Server 中似乎无法正常工作?