Newsgroup: it.comp.java
Titolo: [HELP] vi assicuro che è l'ultimo!

Ciao a tutti vi assicuro che è l'ultimo post!!!
queste due parti di codice di una stessa classe
dovrebbero da un lato riattivare i processi sospesi e 
dall'altro sospendere se stessi.
Il problema è che se anchelancio la notifyAll()
I processi sospesi non si riprendono!!
Quale può essere il motivo?
eppure le notify le lancia dato che classifica.azz
conta le wait e le notify lanciate...
Grazie millisssima. (PS vi allego anche la DUMP del programma)
Siete mitici!
		if (npil==0) {
		    try{
			 classifica.azz(0);
			synchronized(this){
			       System.out.println ("Il pilota "+ npil +" SI SOSPENDE");
			    wait();
			    	 System.out.println ("Il pilota "+ npil +" SI RIPRENDE");
			};
		    }catch (InterruptedException e) {};
........................
		if (!classifica.ultimo() &&  ImTheBest) {
			    synchronized(this){
				classifica.azz(1);
				notifyAll();
				try{
				    classifica.azz(0);
				    System.out.println ("Il pilota "+ npil +" SI SOSPENDE");
				    wait();
				}catch (InterruptedException e) {};
				 System.out.println ("Il pilota "+ npil +" SI RIPRENDE");
			    }
			}else {if ((ngiri<=0) || (classifica.sveglia())){
			    synchronized(this){
				classifica.azz(1);
				notifyAll();
			    };
------------------------
dump del programma!!!
come notate quelli sospesi non si riprendono anche se
le notify vengono lanciate!!
Grazie di nuovo!
java Main 4(thread) 10 (giri)
Pilota numero 0 procedi con le prove!
Pilota numero 1 procedi con le prove!
Fino ad ora 1 wait e invece 0 notify
Il pilota 0 SI SOSPENDE
Pilota numero 2 procedi con le prove!
 Il pilota 1 ha appena iniziato il giro 1
Pilota numero 3 procedi con le prove!
 Il pilota 2 ha appena iniziato il giro 1
 Il pilota 3 ha appena iniziato il giro 1
 Il pilota 1 ha appena finito  il giro 2 in 24838 decimi di secondo
Pilota         Best Lap
1           24838
 Pilota         Best Lap
2           35500
 Pilota         Best Lap
3           35500
 Pilota         Best Lap
0           35500
Fino ad ora 1 wait e invece 1 notify
Fino ad ora 2 wait e invece 1 notify
Il pilota 1 SI SOSPENDE
 Il pilota 2 ha appena finito  il giro 2 in 32974 decimi di secondo
Pilota         Best Lap
1           24838
 Pilota         Best Lap
2           32974
 Pilota         Best Lap
0           35500
 Pilota         Best Lap
3           35500
 Il pilota 2 ha appena iniziato il giro 2
 Il pilota 3 ha appena finito  il giro 2 in 25342 decimi di secondo
Pilota         Best Lap
1           24838
 Pilota         Best Lap
3           25342
 Pilota         Best Lap
2           32974
 Pilota         Best Lap
0           35500
 Il pilota 3 ha appena iniziato il giro 2
 Il pilota 3 ha appena finito  il giro 3 in 3955 decimi di secondo
Pilota         Best Lap
3           3955
 Pilota         Best Lap
1           24838
 Pilota         Best Lap
2           32974
 Pilota         Best Lap
0           35500
Fino ad ora 2 wait e invece 2 notify
Fino ad ora 3 wait e invece 2 notify
Il pilota 3 SI SOSPENDE
 Il pilota 2 ha appena finito  il giro 3 in 23247 decimi di secondo
Pilota         Best Lap
3           3955
 Pilota         Best Lap
2           23247
 Pilota         Best Lap
1           24838
 Pilota         Best Lap
0           35500
 Il pilota 2 ha appena iniziato il giro 3
 Il pilota 2 ha appena finito  il giro 4 in 29374 decimi di secondo
 Il pilota 2 ha appena iniziato il giro 4
 Il pilota 2 ha appena finito  il giro 5 in 33204 decimi di secondo
 Il pilota 2 ha appena iniziato il giro 5
 Il pilota 2 ha appena finito  il giro 6 in 532 decimi di secondo
Pilota         Best Lap
2           532
 Pilota         Best Lap
3           3955
 Pilota         Best Lap
1           24838
 Pilota         Best Lap
0           35500
Fino ad ora 3 wait e invece 3 notify
Fino ad ora 4 wait e invece 3 notify
Il pilota 2 SI SOSPENDE


wait e notify (notifyAll) usano un oggetto come semaforo
dal tuo codice vedo che tu usi *this* come semaforo fra i diversi 
thread: sei sicuro che il *this* sia la stessa istanza per tutti i thread?
per essere sicuro che i thread usino lo stesso semaforo puoi usare un 
qualsiasi oggetto condiviso, anche Classifica.class

Ciao,
se metto Classifica.class mi dà IllegalMonitorException
cosa altro potrei metterci?
Ho capito il problema ma quale semaforo utilizzare??
