Hallo allerseits, ich fand einfach direkt mal an.
Ich habe folgenden Code:
So und ich muss nun wissen warum das so passiert, wie es passiert. Ich hab es ausprobiert und die Ausgabe ist:
Lena: Johanna has bowed to me!
Johanna: Lena has bowed to me!
Ich versteh jetz nun nicht ganz wieso es nicht weitergeht.
Meine Gedankengänge waren das man start() und nicht run() benutzt, allerdings hab ich dann gelesen, dass Start ist und dann auch ein eigener Thread erzeugt wird im Gegensatz zu run() und auch wenn ich run() benutze hört das programm auf:
Lena: Johanna has bowed to me!
Johanna: Lena has bowed back to me !
Johanna: Lena has bowed to me!
Lena: Johanna has bowed back to me !
Immerhin hat man jetzt schon ein bowBack.
Das 2te was mir in den Sinn kommt ist ein Deadlock, wegen dem Synchronized.. Dass da zuviele Zugriffe auf die Instanzmethoden kommen, und es daher nicht weitergeht. Aber auch wenn ich das weglasse, erscheint bei run() dasselbe und bei start() dann doch dasselbe wie bei run()
EDIT:Kann es sein, dass es daran liegt das bow bowBack aufruft und dann versucht wird bowback auszuführen während aber bow auch noch ausgeführt wird?
3. Überlegung: Aufgrund der anonymous threads werden diese nur einmal ausgeführt (kann ich mir eigentlich nicht vorstellen)
Gehe ich mit einem in die richtige Richtung oder sind alle falsch?
Vielen Dank schonmal fürs durchlesen
MfG Crumar
Ich habe folgenden Code:
Java:
public class Kindness {
static class Friend {
private final String name;
public Friend(String name){
this.name=name;
}
public String getName(){
return this.name;
}
public synchronized void bow(Friend bower){
System.out.format("%s: %s" + " has bowed to me!%n", this.name,bower.getName());
bower.bowBack(this);
}
public synchronized void bowBack(Friend bower){
System .out. format ("%s: %s" + " has bowed back to me !%n", this.name, bower.getName());
}
}
public static void main(String[] args){
final Friend lena = new Friend("Lena");
final Friend johanna = new Friend("Johanna");
new Thread(new Runnable()
{
public void run(){
lena.bow(johanna);
}
}).start();
new Thread(new Runnable()
{
public void run(){
johanna.bow(lena);
}
}).start();
}
}
So und ich muss nun wissen warum das so passiert, wie es passiert. Ich hab es ausprobiert und die Ausgabe ist:
Lena: Johanna has bowed to me!
Johanna: Lena has bowed to me!
Ich versteh jetz nun nicht ganz wieso es nicht weitergeht.
Meine Gedankengänge waren das man start() und nicht run() benutzt, allerdings hab ich dann gelesen, dass Start ist und dann auch ein eigener Thread erzeugt wird im Gegensatz zu run() und auch wenn ich run() benutze hört das programm auf:
Lena: Johanna has bowed to me!
Johanna: Lena has bowed back to me !
Johanna: Lena has bowed to me!
Lena: Johanna has bowed back to me !
Immerhin hat man jetzt schon ein bowBack.
Das 2te was mir in den Sinn kommt ist ein Deadlock, wegen dem Synchronized.. Dass da zuviele Zugriffe auf die Instanzmethoden kommen, und es daher nicht weitergeht. Aber auch wenn ich das weglasse, erscheint bei run() dasselbe und bei start() dann doch dasselbe wie bei run()
EDIT:Kann es sein, dass es daran liegt das bow bowBack aufruft und dann versucht wird bowback auszuführen während aber bow auch noch ausgeführt wird?
3. Überlegung: Aufgrund der anonymous threads werden diese nur einmal ausgeführt (kann ich mir eigentlich nicht vorstellen)
Gehe ich mit einem in die richtige Richtung oder sind alle falsch?
Vielen Dank schonmal fürs durchlesen
MfG Crumar
Zuletzt bearbeitet: