Hallo
Wie kann ich bei folgende Code ein Deadlock vermeiden. erstens mit Semaphor und zweitens mit wait und notify.
class X {
private X otherX;
private boolean inUse = false;
public void setPartner(X otherX) {
this.otherX = otherX;
}
public synchronized void m1() {
System.out.println("It's method m1");
while (inUse)
try {
otherX.m2();
wait();
} catch (InterruptedException e) { /* ... */ };
inUse = true;
}
public synchronized void m2() {
// OK
System.out.println("It's method m2");
inUse = false;
notify();
}
}
public class UserofX extends Thread {
private X myX;
public UserofX(X x) {
myX = x;
}
public void run() {
for (int i = 0; i < 10000; i++)
myX.m1();
}
public static void main(String[] args) {
X x1 = new X();
X x2 = new X();
x1.setPartner(x2);
x2.setPartner(x1);
UserofX user1 = new UserofX(x1);
user1.start();
UserofX user2 = new UserofX(x2);
user2.start();
}
}
Gruss
Tomas