VisualVM-Stati del thread


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

inserisci qui la descrizione dell'immagine

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 da una barriera ed è in attesa che un altro thread rilasci il blocco
Park: i fili parcheggiati sono sospesi fino a quando non viene dato un permesso. Unparking a il thread viene solitamente eseguito chiamando il metodo unpark () sull'oggetto thread
Monitor: i thread sono in attesa di una condizione per diventare veri per riprendere l'esecuzione

Quello che non riesco a capire è il Parco statale, ciò che effettivamente sospende il filo? Come rilevo nel codice cosa ha fatto sospendere il thread la sua esecuzione?

Qualcuno può per favore guidarmi in questo senso.

Grazie.

Author: Tomas Hurka, 2014-12-10

2 answers

Ho usato Google e la prima pagina che è venuta fuori aveva un diagramma molto bello che descrive praticamente tutto ciò che serve/vuole sapere. La prossima volta vale la pena provare Google per questo tipo di domande.

inserisci qui la descrizione dell'immagine

1) Nuovo

Il thread è nel nuovo stato se si crea un'istanza della classe Thread ma prima della chiamata del metodo start ().

2) Eseguibile

Il thread è in stato eseguibile dopo l'invocazione del metodo start (), ma lo scheduler del thread ha non selezionato per essere il thread in esecuzione.

3) In esecuzione

Il thread è in esecuzione se lo scheduler del thread lo ha selezionato.

4) Attesa temporizzata

Timed waiting è uno stato di thread per un thread in attesa con un tempo di attesa specificato. Un thread si trova nello stato di attesa temporizzata a causa della chiamata di uno dei seguenti metodi con un'attesa positiva specificata tempo:

  • Discussione.sonno (sleeptime)
  • Oggetto.attendere (timeout)
  • Discussione.join (timeout)
  • Supporto locks.parkNanos (timeout)
  • Supporto locks.parkUntil (timeout)

5) Non eseguibile (bloccato)

Questo è lo stato in cui il thread è ancora attivo, ma non è attualmente idoneo per l'esecuzione.

6) Terminato

Un thread è in stato terminato o morto quando il suo metodo run() esce.

Speriamo che questo risponda alla tua domanda :).

Parcheggio:

Disabilita il thread corrente per scopi di pianificazione del thread a meno che permesso è disponibile.

I thread vengono parcheggiati o sospesi se ti piace chiamarli in questo modo perché non ha un'autorizzazione da eseguire. Una volta concessa l'autorizzazione, il thread verrà decompresso ed eseguito.

I permessi di LockSupport sono associati ai thread (cioè il permesso è dato a un particolare thread) e non si accumula (cioè ci può essere un solo permesso per thread, quando thread consuma il permesso, scompare).

 35
Author: Maciej Cygan, 2014-12-10 16:58:08

VisualVM associa lo stato del thread Java (come descritto nella risposta di @Maciej) allo stato presentato nella sua 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 qui.

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 sono segnalati da VisualVM come Running (e come consumando il 100% della CPU).

 24
Author: Jeremy, 2016-04-06 14:10:31