首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强制解锁可重入锁

强制解锁可重入锁
EN

Stack Overflow用户
提问于 2012-10-09 09:47:29
回答 2查看 2K关注 0票数 3

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

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

在尝试强制解锁我的可重入锁时,有什么其他建议吗?因此,我问道,我的解决方案很不错。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-09 09:58:06

我不会在外部解锁,而是在一个单独的线程中执行阻塞代码,并让它超时

像这样的东西

代码语言:javascript
复制
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();
    }
票数 2
EN

Stack Overflow用户

发布于 2012-10-09 10:00:26

根据我的评论,任何锁都应该包装在try/finally块周围,以确保在出现错误时释放锁

代码语言:javascript
复制
_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跟踪中得到了演示

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12791797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档