一、場景分析
前幾天在做分布式鎖測試:
在調試模式下,lock.lock() 之后打上斷點,想測試一下在當前線程放棄鎖之前,別的線程能否獲取得到鎖。
?發現調試模式下,看門狗機制失效了,Redis 上 30 秒后,鎖就沒了:
看門狗失效
嘗試改為 Thread.sleep 之后就可以了:
看門狗正常
會先有一個 30 秒的鎖,倒計時到 20 秒的時候,又續期為 30 秒,就這樣跑了 40 秒以后,鎖釋放。
?二、原因分析
具體原因沒有深究,AI 給出的解釋是:
?可以得真正去探究 JVM 跟調試機之間的通信協議,才能真正了解。