当前位置: 首页 > 知识库问答 >
问题:

另一个线程java拥有的解锁锁

谢和颂
2023-03-14

我有一个LockManager管理几个线程的锁。有时线程是坏男孩,我必须杀死他们,并要求锁经理释放他们所有的锁。但是,由于我在java中使用ReentrantLock,这是不可能的,我不能解锁另一个线程拥有的锁。

我被迫使用锁(不能使用信号量,这是作业的重点)。是否有Java锁实现允许我解锁其他线程拥有的锁?

到目前为止,我考虑的选择是:

    null
  • 可重入锁-从另一个线程解锁
  • 从不拥有锁的线程中解锁,还是重新设计以避免这种情况?

共有1个答案

翟嘉志
2023-03-14

您已经发现了一个重要的原因,为什么常见的智慧说:不要杀死线程!

锁只是强制终止线程时可能发生的潜在资源泄漏之一。考虑打开文件和套接字等。

还要考虑,如果您确实设法解锁了锁,那么锁首先是有原因的。例如,线程可能部分更新了数据结构,允许从另一个线程访问该结构可能会导致奇怪的程序失败,这些失败即使不是不可能,也很难调试。

 类似资料:
  • 问题内容: 我有一个LockManager来管理多个线程的锁。有时线程是坏男孩,我必须杀死它们并要求LockManager释放所有锁。但是,由于我无法在Java中使用ReentrantLock,因此无法解锁另一个线程拥有的锁。 我被迫使用锁(不能使用信号灯,这是作业的重点)。是否有任何Java Lock实现可让我解锁其他线程拥有的锁? 到目前为止,我考虑的选项是: 以允许我执行此操作的方式重新实现

  • 问题内容: 线程都是可运行的,并且它们拥有相同的锁。两个线程都可以运行时,它们可以锁定相同的地址吗?那是JRE错误吗? 问题答案: 该问题仅存在于线程转储中。实际上,在任何时间点,锁都仅由一个线程持有。但是,线程转储显示两个具有相同锁的不同线程,因为它不是原子的。 可以使用以下程序轻松重现该行为:

  • 以下是问题陈述: 编写一个java程序,使用线程计算前25个素数,并计算前50个斐波那契数。将计算斐波那契数的线程的优先级设置为8,将另一个设置为5。在计算了30个斐波那契数之后,让这个线程进入睡眠状态,开始计算素数。计算完25个素数后,继续斐波那契数计算。 我的代码: 我本以为当斐波那契线停止时,其余的素数会被打印出来,但那没有发生,这背后的原因可能是什么?

  • 我试图理解java中的公平锁,并从中执行了一个实现 http://tutorials.jenkov.com/java-concurrency/starvation-and-fairness.html 哪个很好 代码如下所示 队列对象的代码 我了解其中的大部分,但我有两个疑问 1)在这一行代码中 这个零件是做什么用的? 它有什么作用?因为我删除了这部分代码,得到了相同的正确结果。 2) 因为我相信我

  • 主要内容:1 什么是Java线程死锁,2 Java线程死锁的例子1 什么是Java线程死锁 Java中的死锁是多线程的一部分。当线程正在等待由另一个线程获取的对象锁而第二个线程正在等待由第一个线程获取的对象锁时,可能会发生死锁。由于两个线程都在互相等待释放锁,因此这种情况称为死锁。 2 Java线程死锁的例子 输出结果为:

  • 我做了几个线程转储,发现有16个线程在等待同一个锁,例如: “__ejb-thread-pool1”守护进程prio=6 tid=0x39657c00 nid=0x1c08在条件[0x3297f000]java.lang.thread.state:waiting(parking)在sun.misc.unsafe.park(本机方法)-在java.util.concurrent.locks.lock