【发布时间】:2016-06-21 08:44:49
【问题描述】:
我正在尝试使用以下代码锁定线程:
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);
}
}
第 3 行在 30 分钟后返回 false,因此 TryLockTimeoutException 抛出错误为:
com.concurrent.TryLockTimeoutException: keyIp : Failed to acquire java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock@74be2cee[Unlocked] within 30MINUTES
at com.concurrent.NeAccessLockMap.acquireReadOrWriteLock(NeAccessLockMap.java:72)
请注意,锁定状态显示为错误解锁。
我无法理解为什么会发生这种情况?为什么即使锁是空闲的,线程也无法获得锁。
【问题讨论】:
-
读锁是否被锁定?
-
它不会同时检查读/写锁吗?
-
我不确定,但我不这么认为。为什么要在写锁上打印
Locked,而实际上它是被锁定的读锁,而不是写锁?
标签: java multithreading reentrantlock