I saw this in one of Heinz Kabutz's Java Specialist newsletter editions and, although the rest (and indeed, all) of Dr. Kabutz's articles are well-explained and detailed, he seemed to gloss over what this code is doing, or more importantly, what it's significance is:
public class SomeObject {
private Object lock1;
private Object lock2;
public void doSomething() {
synchronized(lock1) {
synchronized(lock2) {
// ...
}
}
}
}
What are the implications of nesting synchronized
blocks? How does this affect different threads attempting to doSomething()
?