ReentrantReadWriteLock.ReadLock
ReentrantReadWriteLock.WriteLock
对于以上两个类,我是否像这样调用
try {
readLock.tryLock(10, TimeUnit.SECONDS)
[...]
} finally {
readLock.unlock();
}
OR
readLock.tryLock(10, TimeUnit.SECONDS)
try {
[...]
} finally {
readLock.unlock();
}
哪个更安全,同样适用于lock()
方法与tryLock()
方法?
答案 0 :(得分:4)
它必须进入条件部分,如果你没有获得锁定,就不能尝试使用数据。
if (readLock.tryLock(10, TimeUnit.SECONDS)) {
try {
[...]
} finally {
readLock.unlock();
}
} else {
// failed to get lock
}
答案 1 :(得分:2)
@PeterLawrey说的是什么,但还有更重要的。
Lock实现可能能够检测到锁的错误使用,例如可能导致死锁的调用,而可能会在这种情况下抛出(未经检查的)异常。
如果您尝试锁定try
区块,则可能会遇到“双重问题”,即try
中的一个例外和finally
中的另一个例外锁将首先锁定失败...
这实际上意味着您必须.lock()
通常在try
块前面{}}}
lock.lock();
try {
something();
} finally {
lock.unlock();
}