从技术角度看,这两个清单有什么不同?首先是在锁定的java中提供的。第二是我的。
1.
Lock l = ...;
l.lock();
try {
// access the resource protected by this lock
} finally {
l.unlock();
}2.
Lock l = ...;
try {
l.lock();
// access the resource protected by this lock
} finally {
l.unlock();
}发布于 2015-06-25 19:07:44
原因是在Lock中找到
执行方面的考虑 锁实现通常会对线程释放锁(通常只有锁的持有人才能释放锁)施加限制,并在违反限制时抛出(未检查的)异常。任何限制和异常类型都必须由Lock实现记录。
类似地,如果出现未经检查的异常,.lock()可能会失败。
这意味着:
l.lock();
try {
...
} finally {
l.unlock();
}如果锁定失败,您将永远无法到达unlock()。鉴于:
try {
l.lock();
...
} finally {
lock.unlock();
}如果锁定失败,则不必要地抛出两个异常;其中一个将丢失。
更不用说,取决于锁的实现,使用第二个版本,您可能最终会解锁“其他人”的锁……这不是件好事。
发布于 2015-06-25 19:06:17
区别在于如果l为null会发生什么:
此外,如果锁定失败,则第二个示例中的first块可能尝试解锁未锁定的锁,而第一个示例则不会。
https://stackoverflow.com/questions/31058681
复制相似问题