1
我嘗試使用下面的代碼段一個線程獲得鎖:的ReentrantReadWriteLock未能得到鎖定,即使其狀態解鎖
Lock lock = readLock ? getLock(key).readLock() : getLock(key).writeLock();
try {
boolean locked = lock.tryLock(DEFAULT_TRY_TIME, DEFAULT_TRY_TIME_UNIT); //line 3
// If false, lock is not acquired
if (!locked) {
throw new TryLockTimeoutException(
key + ": Failed to acquire " + lock + " within " + DEFAULT_TRY_TIME_STRING);
}
}
線30分鐘因此TryLockTimeoutException
被拋出,錯誤爲後3點返回false :
com.concurrent.TryLockTimeoutException: keyIp : Failed to acquire [email protected]2cee[Unlocked] within 30MINUTES
at com.concurrent.NeAccessLockMap.acquireReadOrWriteLock(NeAccessLockMap.java:72)
請注意,鎖狀態顯示爲錯誤解鎖。
我無法理解爲什麼會發生這種情況?即使鎖定空閒,爲什麼線程無法鎖定?
鎖定讀鎖嗎? – tkausl
它不會檢查讀/寫鎖嗎? – Batty
我不確定,但我不這麼認爲。爲什麼它應該在寫鎖上打印'Locked',當它實際上是鎖定的鎖定,而不是寫鎖? – tkausl