[英]Force unlocking a reentrant lock
我有一個可重入鎖,我根據自己的需要包裝在一個定制的課程中。 但是,由於應用程序的性質,將鎖定到可重入鎖定的線程卡住(外部故障)並且無法釋放重入鎖定。
我想知道是否有一種方法可以明確解鎖重入鎖? 我知道重入鎖的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();
}
根據我的評論,任何鎖都應該包含在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();
}
這在鎖定對象跟蹤中得到了證明
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.