Back
public class NestedMonitorDeadlock {
public static void main(String[] args) {
Wrapper w = new Wrapper(new Pair());
(new Thread1(w)).start();
(new Thread2(w)).start();
}
}
class Pair {
private int hi = 0;
private int lo = 0;
public synchronized void inclo() {
while (lo <= hi)
try { wait(); } catch ( InterruptedException ex) {}
lo++;
}
public synchronized void inchi() {
hi++;
notify();
}
}
class Wrapper {
private Pair p;
Wrapper(Pair x) {p = x;}
public synchronized void inclo() { p.inclo(); }
public synchronized void inchi() { p.inchi(); }
}
class Thread1 extends Thread {
private Wrapper w;
Thread1(Wrapper x) {w = x;}
public void run() {
w.inclo();
}
}
class Thread2 extends Thread {
private Wrapper w;
Thread2(Wrapper x) {w = x;}
public void run() {
w.inchi();
}
}
Back