In this scenario, method3
can't have lock2
locked without lock1
locked, so a deadlock cannot happen in that method. Note that this doesn't prevent some kind of additional code not shown to acquire lock2
before lock1
, such as
public void method4() {
lock2.lock();
lock1.lock();
// ...
lock1.unlock();
lock2.unlock();
}
This, when run concurrently with method3
can produce a deadlock.