[java] VisualVM - Stati di thread


0 Answers

VisualVM esegue il mapping dello stato del thread Java (come descritto nella risposta di @ Maciej) allo stato presentato nella relativa interfaccia utente come segue:

BLOCKED -> Monitor
RUNNABLE -> Running
WAITING/TIMED_WAITING -> Sleeping/Park/Wait (see below)
TERMINATED/NEW -> Zombie

Sleeping e Park sono casi specifici di attesa (temporizzata):

Sleeping: specifically waiting in Thread.sleep().  
Park:     specifically waiting in sun.misc.Unsafe.park() (presumably via LockSupport).

(La mappatura viene eseguita in ThreadMXBeanDataManager.java .)

Una breve (e non autorevole) discussione sullo stato del thread Java può essere trovata here .

MODIFICATO PER AGGIUNGERE:

Vale anche la pena notare che i thread che bloccano le chiamate ai metodi nativi appaiono nella JVM come RUNNABLE , e quindi vengono segnalati da VisualVM come Running (e come consumano CPU al 100%).

Question

Qualcuno può spiegarmi la differenza tra gli stati del thread Sleeping , Wait , Park e Monitor in VisualVM.

Questo è quello che ho trovato:

Running : il thread è ancora in esecuzione.
Sleeping : thread sta dormendo (metodo yield () è stato chiamato sull'oggetto thread)
Wait : il thread è stato bloccato da un mutex o una barriera e attende che un altro thread rilasci il blocco
Park : i fili parcheggiati vengono sospesi fino a quando non viene loro concesso un permesso. Unparking di un thread viene solitamente effettuato chiamando il metodo unpark () sull'oggetto thread
Monitor : i thread sono in attesa di una condizione per diventare true per riprendere l'esecuzione

Quello che non riesco a capire è lo State Park, che cosa sospende effettivamente il thread? Come faccio a rilevare nel codice cosa ha causato il thread sospendere la sua esecuzione?

Qualcuno può guidarmi per favore in questo senso.

Grazie.




Related