【发布时间】:2015-07-29 17:54:06
【问题描述】:
我是 Java 新手。我在 Oracle Java 教程中阅读了有关 Java 并发的内容,特别是关于锁定对象Link to Page 的部分。我似乎无法理解的是为什么在 impendingBow() 和 bow() 方法中使用 try 和 finally 块;
public boolean impendingBow(Friend bower) {
Boolean myLock = false;
Boolean yourLock = false;
try {
myLock = lock.tryLock();
yourLock = bower.lock.tryLock();
} finally {
if (! (myLock && yourLock)) {
if (myLock) {
lock.unlock();
}
if (yourLock) {
bower.lock.unlock();
}
}
}
return myLock && yourLock;
}
public void bow(Friend bower) {
if (impendingBow(bower)) {
try {
System.out.format("%s: %s has"
+ " bowed to me!%n",
this.name, bower.getName());
bower.bowBack(this);
} finally {
lock.unlock();
bower.lock.unlock();
}
} else {
System.out.format("%s: %s started"
+ " to bow to me, but saw that"
+ " I was already bowing to"
+ " him.%n",
this.name, bower.getName());
}
}
如果没有 try-finally 块,这两段代码是否可以工作? tryLock() 函数会抛出我不知道的异常吗?
【问题讨论】:
-
我想是的,暗示
tryLock()可能会引发异常。
标签: java multithreading try-finally