PDA

View Full Version : [Java] domanda sui Thread


Gin&&Tonic
06-04-2011, 12:08
Ho scritto un programma , nel quale ho utilizzato Lock ( e Condition) .
Il programma quando lo lancio funziona , il problema e che se lo lancio 11-12 volte di fila mi si blocca.

Cosa può essere?

PGI-Bis
06-04-2011, 12:20
Può essere di tutto, un'ipotesi è che il programma vada in dead-lock per una reciprocità nell'uso della condizione. Puoi verificare se si tratti di un dead-lock usando il profiler integrato nel jdk (jvisualvm).

Gin&&Tonic
06-04-2011, 13:44
Puoi verificare se si tratti di un dead-lock usando il profiler integrato nel jdk (jvisualvm).

:eek: :eek: Se il problema è dovuto ad un dead-lock , posso fare qualcosa per eliminarlo?



:muro: :muro: Come faccio ad utilizzare il profiler?

PGI-Bis
06-04-2011, 14:02
un dead-lock è semplicemente dovuto ad un thread che si mette in attesa per una condizione che si verifica quando un altro thread fa qualcosa e quel qualcosa dipende da un'azione che il primo thread potrà compiere solo dopo essersi risvegliato.

E' un grande classico della malavita, io libero l'ostaggio se tu mi dai i soldi, io ti do i soldi se tu mi dai l'ostaggio: uno dei due deve fare un passo indietro o finisce male.

Si verifica per un intoppo logico, a volte basta una coda per risovere.

Per usare jvisualvm, lanci il tuo programma, apri una console dei comandi, digiti "jvisualvm" e premi invio. Si apre una finestra, a sinistra vedi gli identificatori dei programmi java in esecuzione, doppio click sul tuo, selezioni la scheda threads e già dalle linee colorate dovresti capire se i tuoi thread sono bloccati.

Se premi thread-dump vedrai su quale "monitor" i thread in attesa sono bloccati.