|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Aug 2010
Messaggi: 138
|
[Java] domanda sui Thread
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? |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
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).
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Aug 2010
Messaggi: 138
|
Codice:
Puoi verificare se si tratti di un dead-lock usando il profiler integrato nel jdk (jvisualvm). ![]() ![]() ![]() ![]() |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
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.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:49.