View Full Version : [JAVA] thread: start contemporaneo
mi spiego meglio. io ho già esteso la classe Thread e modificato il metodo tun in modoc he fa quello che voglio io.
nella classe Test dove ho il main ho creato e fatto partire i tre processi
new Thread("nomeThread1").start();
new Thread("nomeThread2").start();
il problema è che questi tre processi non partono in contemporanea... (almeno così so io)
è l'esercizio mi chiede di implementare un abitro coordina l'inizio del gioco garantendo che i giocatori possano iniziare il gioco contemporaneamente
new Thread("nomeThread1").start();
new Thread("nomeThread2").start(); codice inutile, il metodo run della classe Thread non fa niente. non é Thread che devi istanziare, ma la tua sottoclasse.
il problema è che questi tre processi non partono in contemporanea... (almeno così so io)
è l'esercizio mi chiede di implementare un abitro coordina l'inizio del gioco garantendo che i giocatori possano iniziare il gioco contemporaneamente blocca entrambi i thread su un oggetto con Object.wait e sbloccali contemporaneamente con Object.notifyAll (sullo stesso oggetto naturalmente). ricordati di gestire appropriatamente le condizioni di spurious wakeup.
Usa una barriera (java.util.concurrent.CyclicBarrier).
Usa una barriera (java.util.concurrent.CyclicBarrier). effettivamente questa via é preferibile rispetto al sistema che ho suggerito io, il quale richiede piu lavoro perché oltre alla gestione degli spurious wakeups bisogna anche stare attenti all'eventualitá che notifyAll venga chiamata prima che entrambi i thread si siano bloccati sulla wait.
ad esempio, questa soluzione é errata:
final Object start = new Object();
volatile boolean starting = false;
.
.
.
new Thread("Thread1") {
@Override
public void run()
{
synchronized (start)
{
while (!starting)
{
start.wait();
}
}
}
}.start();
new Thread("Thread2") {
@Override
public void run()
{
synchronized (start)
{
while (!starting)
{
start.wait();
}
}
}
}.start();
starting = true;
start.notifyAll();
meglio la barriera.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.