Da quel che vedo, ti suggerirei caldamente di studiarti molto meglio la parte sui thread, sul loro utilizzo e sul loro controllo. In quel codice ci sono un sacco di errori che non stò nemmeno ad elencare
Cmq per darti un idea di sincronizzazione di thread simile a quella che vorresti ottenere tu, guardati questo codice:
Codice:
public class ThreadSyncDemo {
public static void main(String[] args) {
new ThreadSyncDemo();
}
public ThreadSyncDemo() {
Tavolo tavolo = new Tavolo();
new Arbitro(tavolo).start();
new Giocatore(0, tavolo).start();
new Giocatore(1, tavolo).start();
new Giocatore(2, tavolo).start();
new Giocatore(3, tavolo).start();
new Giocatore(4, tavolo).start();
}
private class Giocatore extends Thread {
private Tavolo tavolo;
private int i;
public Giocatore(int i, Tavolo tavolo) {
this.i = i;
this.tavolo = tavolo;
}
@Override
public void run() {
System.out.println("Giocatore " + i + " inizia.");
tavolo.aggiungiGiocatore();
System.out.println("Giocatore " + i + " termina.");
}
}
private class Arbitro extends Thread {
private Tavolo tavolo;
public Arbitro(Tavolo tavolo) {
this.tavolo = tavolo;
}
@Override
public void run() {
System.out.println("Arbitro inizia.");
while(tavolo.getGiocatoriCollegati() < 5) {
System.out.println("Limite giocatori non ancora raggiunto.");
}
System.out.println("Arbitro termina.");
}
}
private class Tavolo {
private int giocatoriCollegati;
private final Object inUse;
public Tavolo() {
giocatoriCollegati = 0;
inUse = new Object();
}
public void aggiungiGiocatore() {
synchronized(inUse){
giocatoriCollegati++;
}
}
public int getGiocatoriCollegati() {
synchronized(inUse){
return giocatoriCollegati;
}
}
}
}
Se non ti è chiaro chiedi pure