Hallo,
ich soll die Verklemmung in diesem Programm finden:
Nachdem ich die Klasse ausgeführt habe, hab ich gesehen, dass nur die Methode wave ausgeführt wird(beziehungsweise es bei waveBack klemmt), weil in der Konsole steht nur:
FriendA: FriendB has waved to me!
FriendB: FriendA has waved to me!
Nun frag ich mich warum es da zu einer Verklemmung kommt.
Weil der Ablauf ist so:
friendA ruft wave aus, dann wird der Name von friendB in tempname gespeichert, dann der Satz ausgegeben und dann wird waveback aufgerufen. Nun kann friendB auf die Methode wave zugreifen. Und führt sie aus (sieht man an der Ausgabe von dem Satz). Kann aber waveback nicht aufrufen, da friendA da noch ist (synchronized). Jetzt frag ich mich aber, warum friendA da immer noch ist.
Würde mich über eure Hilfe freuen
ich soll die Verklemmung in diesem Programm finden:
Code:
public class Wave {
static class Friend {
private final String name;
public Friend(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public synchronized void wave(Friend waver) {
String tempname = waver.getName();
System.out.format("%s: %s has waved to me!%n", this.name, tempname);
waver.waveback(this);
}
public synchronized void waveback(Friend waver) {
String tempname = waver.getName();
System.out.format("%s: %s has waved back to me!%n", this.name, tempname);
}
}
public static void main(String[] args) {
final Friend friendA = new Friend("FriendA");
final Friend friendB = new Friend("FriendB");
new Thread(new Runnable() {
public void run() {
friendA.wave(friendB);
}
}).start();
new Thread(new Runnable() {
public void run() {
friendB.wave(friendA);
}
}).start();
}
}
Nachdem ich die Klasse ausgeführt habe, hab ich gesehen, dass nur die Methode wave ausgeführt wird(beziehungsweise es bei waveBack klemmt), weil in der Konsole steht nur:
FriendA: FriendB has waved to me!
FriendB: FriendA has waved to me!
Nun frag ich mich warum es da zu einer Verklemmung kommt.
Weil der Ablauf ist so:
friendA ruft wave aus, dann wird der Name von friendB in tempname gespeichert, dann der Satz ausgegeben und dann wird waveback aufgerufen. Nun kann friendB auf die Methode wave zugreifen. Und führt sie aus (sieht man an der Ausgabe von dem Satz). Kann aber waveback nicht aufrufen, da friendA da noch ist (synchronized). Jetzt frag ich mich aber, warum friendA da immer noch ist.
Würde mich über eure Hilfe freuen