View Single Post
Old 11-01-2009, 22:54   #8
Don[ITA]
Senior Member
 
L'Avatar di Don[ITA]
 
Iscritto dal: Jul 2006
Città: Bergamo
Messaggi: 401
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
__________________
iMac 27" 5K
Don[ITA] è offline   Rispondi citando il messaggio o parte di esso