Я новичок здесь и на Java. Я читал о параллелизме Java в учебнике Oracle Java, а именно в разделе «Объекты блокировки» Link to Page. Дело в том, что я не могу понять, почему блоки try и finally используются в методах impendingBow() и bow();Java пытается и, наконец, блокирует пример многопоточности
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()' может генерировать исключение. – CubeJockey