java install - VisualVM-Stati di thread




centos macos (3)

Ho usato google e la prima pagina che è venuta fuori aveva un diagramma molto carino che praticamente descrive tutto ciò di cui hai bisogno / vuoi sapere. La prossima volta vale la pena provare google per questo tipo di domande.

1) Nuovo

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

2) Runnable

Il thread è in stato eseguibile dopo il richiamo del metodo start (), ma lo scheduler del thread non lo ha selezionato come thread in esecuzione.

3) In esecuzione

Il thread è in esecuzione se è stato selezionato dallo scheduler dei thread.

4) Attesa a tempo

L'attesa temporizzata è uno stato di thread per un thread in attesa con un tempo di attesa specificato. Un thread è nello stato di attesa a tempo a causa della chiamata a uno dei seguenti metodi con un tempo di attesa positivo specificato:

  • Thread.sleep (SleepTime)
  • Object.wait (timeout)
  • Thread.join (timeout)
  • LockSupport.parkNanos (timeout)
  • LockSupport.parkUntil (timeout)

5) Non eseguibile (bloccato)

Questo è lo stato in cui il thread è ancora attivo, ma al momento non è idoneo all'esecuzione.

6) Terminato

Un thread è terminato o morto quando il suo metodo run () viene chiuso.

Spero che questo risponda alla tua domanda :).

Parcheggio:

Disabilita il thread corrente per scopi di schedulazione thread a meno che il permesso sia disponibile.

I thread vengono parcheggiati o sospesi se si desidera chiamarlo in questo modo perché non dispone dell'autorizzazione per l'esecuzione. Una volta concesso il permesso, il thread sarà non parcheggiato ed eseguito.

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

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.


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%).


Se XML è stato creato da JAXB, può essere facilmente riconvertito in oggetti. C'è un tutorial su oracle che illustra un modo per farlo. Il framework Spring offre caratteristiche simili usando JAXB che sono molto convenzionali.







java jvm visualvm jvisualvm