migliorabile ha scritto:
Prova a pensarla cosi':
hai due giocatori ed un arbitro
Il tuo programma quando parte istanzia per prima l'arbitro, quindi i due giocatori a cui passa l'arbitro con cui si devono sincronizzare.
L'arbitro parte e di mette in attesa che dei giocatori si presentino per giocare.
I giocatori partono, e si mettono in attesa che l'arbitro dica: giocate!.
Ci sono tue possibilita': l'arbitro sa gia' quanti giocatori ci saranno, oppure sara' il programma a dire all'arbitro:non ci sono piu' giocatori.
Quando l'arbitro dice giocate!, i due giocatori partono, generano la loro giocata e la dicono all'arbitro, quindi si fermano!
L'arbitro attende che i due giocatori giochino. Quando hanno giocato, controlla le giocate, decide chi ha vinto, quindi si prepara per una nuova giocata.
L'arbitro decide il numero di giocate, ed alla fine, invece di dire ai giocatori giocate!, dira' loro terminate!.
Il programma terminera' solo quando arbitro e giocatori saranno terminati.
Ti ringrazio molto per la tua risposta, che mi ha già aiutato ad impostare meglio il programma. Però ho ancora il dubbio di come far sì che due thread si passino dati tra loro. Tenete conto che sono davvero un niubbo sia di java che di programmazione concorrente, avendo appena iniziato a preparare il relativo esame.
Al momento mi vengono in mente due strade, ma su entambe ho dei dubbi:
- usare una variabile
public su cui il thread giocatore scrive il suo tiro, mentre il thread arbitro lo legge.
- implementare il metodo
run del thread giocatore in modo che ritorni un valore, che sarà il tiro giocato di volta in volta
Entrambi i metodi non mi convincono perchè a lezione ci hanno sconsigliato (quando possibile) l'utilizzo di variabili pubbliche e perchè in ogni esercitazione che abbiamo fatto i metodi
run dei thread venivano sempre implementati senza valore di ritorno (void).
Sono solo coincidenze/pippe accademiche o effettivamente sono regole di buona programmazione che è bene osservare?