【问题标题】:What happens if the thread acquires 10 reentrant locks and dies?如果线程获得 10 个可重入锁并死掉会发生什么?
【发布时间】:2014-10-10 13:41:30
【问题描述】:

假设一个线程多次获取资源的可重入锁并死掉。 资源会怎样? 其他客户端可以访问该资源吗?

【问题讨论】:

  • 您能否展示您用于测试的示例代码并向我们说明造成混乱的原因?
  • 出于好奇,我提出了这个疑问。由于java中的重入锁维护holdCount并在holdCount变为零时释放锁。
  • 很容易测试:public void run() { sharedLock.lock(); return; }

标签: java reentrantlock


【解决方案1】:

通过演示证明:

public static void main(String[] args) throws InterruptedException {
  final ReentrantLock lock = new ReentrantLock();
  final Thread t = new Thread(()->lock.lock());
  t.start();
  t.join();
  System.out.println(t.isAlive());
  System.out.println(lock.tryLock());
}

打印出来

false
false

【讨论】:

    【解决方案2】:

    对我来说,这听起来像是典型的僵局。如果锁没有被所有者释放 - 它将永远保持锁定状态。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-16
      • 1970-01-01
      相关资源
      最近更新 更多