PDA

View Full Version : [JAVA]Thread.join()


MEMon
20-09-2006, 00:43
E' possibile fare il join tra vari thread?
Ad esempio:
Nel Thread A: B.join();
Thread A fa il join sul Thread B e si ferma in attesa della fine del Thread B.

Nel Thread B: C.join();
Thread B fa il join sul Thread C e si ferma in attesa della fine del Thread C.

Quindi alla fine A aspetterà la fine di B, che però aspetta la fine di C, quindi A aspetta la fine di C, si può fare una cosa del genere?
Io ho provato ma sembra che sia il thread B anzichè fermarsi vada contomperaneamente a C, mentre il thread A si ferma giustamente.

MEMon
20-09-2006, 00:49
Forse ho capito il problema, il C.join() non lo faccio nel thread B mi sa, ma nell'actionPerformed() (devo infatti fare il join al premere di un pulsante) quindi mi sa che il join lo fa tra il thread che controlla gli eventi e il thread C, come posso fare a staccarmi dal thread degli eventi?

MEMon
20-09-2006, 00:54
Ok ci son riuscito, mi sa che sono un po' impedito vista l'ora...

andbin
20-09-2006, 08:58
Quando fai queste cose ... occhio solo ai deadlock!

TempestaT400
20-09-2006, 11:14
già... una volta che crei le situazioni di stallo... per trovarle e risolverle sono cavoli!
Quindi, meglio pensare prima di agire.!.

Deadlock, starvation... Problema dei 5 filosofi... Buffer Lettore-Scrittore.!..
Mi fanno tornare in mente l'esame di sistemi operativi!!! (CHE BELLO)

MEMon
20-09-2006, 15:22
Cosa sono i deadlock? Cosa devo valutare per non incappare in una situazione di stallo?

andbin
20-09-2006, 15:49
Cosa sono i deadlock? Cosa devo valutare per non incappare in una situazione di stallo?deadlock = stallo, blocco. Tutte quelle situazioni in cui 2 o più thread (o processi, anche se più raro) si bloccano a vicenda, impedendo (indefinitamente) la continuazione delle operazioni.

Esempio tipico con i thread: il thread A fa thread_b.join() e il thread B fa thread_a.join(). Ognuno dei due aspetta l'altro e .... buonanotte!

Ma possono venirsi a creare anche situazioni davvero molto più complicate!

MEMon
20-09-2006, 15:50
Ah ho capito grazie!