ho un problema si sincronizzazione alle volte e non riesco a capire come posso risolvere provo a postare le parti di codice interessate


questa sta nel run() del mio giocatore..i giocatori sono 3 da [0-2]

synchronized(this){
this.S=1;
Turnox[f].S=0;


if(verifica==true){/*se ha finito le carte stampa risveglia il giocatore successivo e si interrompe*/

Thread.currentThread().interrupt();

if(Thread.currentThread().isInterrupted())
{

System.out.println("Ho perso e sono uscito dal gioco sono il numero "+(v_giocatore));


for(int m=0;m<n;m++){

Turnox[m].numero_giocatori=(Turnox[m].numero_giocatori)-1;
}

Turnox[f].sem.signal(Turnox[f],S);/*risveglia il giocatore*/
return;
}
}
else{

Turnox[f].sem.signal(Turnox[f],S); /*risveglia il giocatore*/

}

while(this.S==1){
try {
wait();
}

catch (InterruptedException e) {}
}
}
}


}


questa è la classe Semaphore

public class Semaphore {

Giocatore g;
int S;

public Semaphore(int S){

this.S=S;

}



public void signal(Giocatore gio,int S) {
this.g=gio;
this.S=S;

S--;

if (S==0) {
synchronized(g){
g.notify();/*risveglia il giocatore*/
}
}
}

}

please help me!!!