我有一个可重入的锁,我根据自己的需要将其包装在一个自定义的类中。但是,由于应用程序的性质,将锁定到可重入锁定的线程卡住(外部故障)并且无法释放重入锁定。
我想知道是否有明确解锁重入锁的方法?我知道重入锁的API没有这样的方法 - 但是我考虑引入一个计时器任务,它将在一段时间后解锁重入锁或者杀死保存重入锁的线程。
试图强制解锁我的折返锁定的任何其他建议?我问的解决方案非常好。
答案 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路径
中得到了证明