我有一个可重入的锁,可以根据自己的需要包装在定制的类中。但是,由于应用程序的性质,将锁保持在可重入锁上的线程会卡住(外部故障),并且无法释放可重入锁。

我想知道是否有一种方法可以显式解锁可重入锁定?我知道可重入锁的API没有这种方法-但是我正在考虑引入一个计时器任务,该任务将在设置的时间段后解锁可重入锁,或者杀死持有该可重入锁的线程。

在尝试强制解锁我的可重入锁时还有其他建议吗?我的解决方案很不错,所以我问。

最佳答案

而不是从外部解锁,我将在单独的线程中执行阻止代码并使它超时

像这样的东西

Future<MyTask>future = taskExecutor.submit(myTask)
try {
    future.get(5,TimeUnit.Seconds);
    ...
    }
    catch (Exception e)
    {
        future.cancel(true); // attempt to interupt the thread
        throw new Exception();
    }

10-04 20:17