Hallo,
folgendes Problem: Was genau passiert durch das markierte n.wait(); geht an der Stelle der main-Thread schlafen oder der n-Thread? Ich hab schon einiges :rtfm: aber irgendwie sind die Erklärungen alle nur wischi-waschi.
Denn nach meiner momentanen Kenntnislage könnte es doch sein, das nach n.start(); der Scheduler tatsächlich den n.thread laufen lässt, dieser arbeitet die synchronisierte Schleife ab und macht dann das notify(). Aber wo zielt das notify() dann hin? Da der main-Thread ja noch nicht weiter als bis zu dem n.start() gelaufen ist, war er ja noch nicht bei dem n.wait(); Dieses würde der main-Thread dann ja erst abarbeiten, wenn das notify() schon vorbei ist?
Wäre echt toll, wenn jemand eine Erklärung hätte, die es in meinem Hirn klicken lässt...
Gruß,
Ralf
folgendes Problem: Was genau passiert durch das markierte n.wait(); geht an der Stelle der main-Thread schlafen oder der n-Thread? Ich hab schon einiges :rtfm: aber irgendwie sind die Erklärungen alle nur wischi-waschi.
Denn nach meiner momentanen Kenntnislage könnte es doch sein, das nach n.start(); der Scheduler tatsächlich den n.thread laufen lässt, dieser arbeitet die synchronisierte Schleife ab und macht dann das notify(). Aber wo zielt das notify() dann hin? Da der main-Thread ja noch nicht weiter als bis zu dem n.start() gelaufen ist, war er ja noch nicht bei dem n.wait(); Dieses würde der main-Thread dann ja erst abarbeiten, wenn das notify() schon vorbei ist?
Wäre echt toll, wenn jemand eine Erklärung hätte, die es in meinem Hirn klicken lässt...
Gruß,
Ralf
Java:
package threadwait;
public class Main {
public static void main(String[] args) {
ThreadNotify n=new ThreadNotify();
n.start();
synchronized(n) {
try {
n.wait(); // Hier liegt der Hund begraben
} catch(InterruptedException e) { }
}
System.out.println("Der letzte Eintrag ist: "+n.last);
}
}
class ThreadNotify extends Thread {
int last;
public void run() {
synchronized(this) {
for(int i=0; i<100;i++) {
last=i;
}
notify();
}
}
}