Newsgroup: it.comp.java
Titolo: AIUTO SUI THREAD

Ho un problema!!!
Qualcuno di voi conosce il modo di svegliare un particolare thread dopo
averne creato n diversi e averli messi tutti in wait()?
In poche parole:
dai 10 thread che si chiamano "Giocatore_1", "Giocatore_2", ecc. tutti in
attesa, come faccio ad esempio a svegliare solo il thread Giocatore_4 e
lasciare gli altri in wait()?
Spero di essere stata chiara!
Grazie mille

In %7n17.1308$
eB4....@news.infostrada.it
, Milly Busatti,


Per risvegliare un thread che ha ricevuto wait() dovresti usare notify()
(per notificare che il monitor si è liberato), ma se devi sospendere
semplicemente l'esecuzione di un thread ti conviene usare suspend() e
resume().
Ciao,
Edoardo

 
Nello spazio di pensiero chiamato : it.comp.java 
Ha scritto questo messaggio : 

Non puoi!
Devi mettere i 4 oggetti in wait su quattro oggetti diversi e poi fare
la notify() sull'oggetto che vuoi risvegliare, mi spiego meglio :
Suppongo che Giocatore1, Giocatore2... siano istanze di una classe
Runnable, o di una classe che  estende Thread, comunque in ognuno di
loro a origine un thread; se e' cosi quando questi 4 thread entrano
dentro nel monitor, dovresti metterli in wait su quattro oggetti
diversi. Questi oggetti, sarebbe meglio se fossero direttamente gli
oggetti Giocatore1, Giocatore2.., ma puoi benissimo creare 4 oggetti
di classe Object fittizzi per risolvere il tutto. Ti faccio un
esempio:
// Questo lo fai all'interno della classe che funge da monitor
// che conosce le istanze dei quattro giocatori
Giocatore[] giocatori = new Giocatori[4];
// Questo e' il metodo sincronizzato che chiamano i 4 thread
// I'oggetto all'interno del quale ha origine il thread, si porta 
// dietro la sua istanza = giocatore
// praticamente all'interno del run chiami 
// monitor.addormenta(this);
public synchronized void addormenta(Giocatore giocatore)
{	// fai quello che vuoi
	synchronized(giocatore)
	{	// sei sincronizzata sull'oggetto che ti sei portata
		// dietro, quindi puoi metterti in wait su quell'oggetto
		try
		{	giocatore.wait();
		}
		catch(InterruptedException e)
		{	e.printStackTrace();
		}
	}
	// fai quello che vuoi
}
// Questo e' il metodo che dovrebbe risvegliare in maniera precisa
// un thread in attesa. i rappresenta l'indice del threa che vuoi 
// risvagliare
public synchronized void risveglia(int i)
{	synchronized(giocatori[i])
	{	giocatori[i].notify();
	}
}
In questo modo con risveglia(i), risvegli esattamente il thread, che
si e' messo in pausa su quell'oggetto. Spero sia chiaro. Ciao
[}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{]
SunGray aka Gabriele Lana  
www.redangel.it
www.sungray.com
contact me @ : 
www.redangel.it
contact me @ : 
sun...@tiscalinet.it
[}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{}-{]

 wrote in message
%7n17.1308$eB4....@news.infostrada.it...


In p0J17.15972$
q77.1...@news2.tin.it
, Gigi, 
gigigu...@hotmail.com
, il


Mi chiedevo come mai Gigi e Sungray insistano nelle risposte a Milly con
l'uso di wait() e notify() cercando un mezzo per aggirare il problema,
quando esistono i metodi resume() e suspend(), che mi pare facciano già
quanto serve a Milly.
Non è una domanda retorica e men che meno provocatoria, ma una sincera
curiosità, per capire se mi sfugge qualcosa.
Ciao,
Edoardo

 Edoardo
-- 
Ciao,  |     Gott weiss ich will kein Engel sein
Matteo |                     -- Rammstein, Engel

curiosità, per capire se mi sfugge qualcosa.
Prova a leggere la pagina "Why Are Thread.stop, Thread.suspend, 
Thread.resume and Runtime.runFinalizersOnExit Deprecated?" sulla
documentazione del JDK (ci arrivi dal JavaDoc della classe Thread).
HTH
-- 
Ciao
	Fabrizio C.

In 
3b49b120...@news.libero.it
, Fabrizio Camera,


Ringrazio per le risposte: non ho guardato lì perché ero piuttosto convinto
(ed in effetti non bisogna esserlo mai 8-) ) che solo stop() fosse
deprecato. Quindi pensavo ci fosse un altro motivo. Ecco svelato l'arcano!
Grazie,
Edoardo

 ha scritto nel messaggio
news:%7n17.1308$eB4....@news.infostrada.it...
