强制解锁可重入锁定

时间:2012-10-09 01:47:29

标签: java multithreading concurrency locking reentrancy

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

我想知道是否有明确解锁重入锁的方法?我知道重入锁的API没有这样的方法 - 但是我考虑引入一个计时器任务,它将在一段时间后解锁重入锁或者杀死保存重入锁的线程。

试图强制解锁我的折返锁定的任何其他建议?我问的解决方案非常好。

2 个答案:

答案 0 :(得分:2)

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

类似这样的事情

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

答案 1 :(得分:0)

根据我的评论,任何锁都应该围绕try/finally块,以确保在出现问题时释放锁

_lock.lock(); // will wait until this thread gets the lock
try
{
    // critical section
}
finally
{
    //releasing the lock so that other threads can get notifies
    _lock.unlock();
}       

这在Lock Objects路径

中得到了证明