Java JVM profiling, stato del thread-cosa significa lo stato "Monitor"?
Io uso visualVM collegare un'applicazione Java multi thread, thread ha 4 stato, vale a dire in esecuzione, dormire, attendere, Monitorare. Cosa significa questo stato di monitoraggio? Qual è la differenza tra wait e Monitor?
3 answers
Questi stati sono gli stessi menzionati nel Thread.State
enum. "Wait" significa, come dice la documentazione:
Un thread è in stato di attesa a causa della chiamata di uno dei seguenti metodi:
- Oggetto.attendere senza timeout
- Discussione.partecipa senza timeout
- Supporto locks.parco
"Monitor" è il BLOCKED
stato, in cui il thread è in attesa di ottenere un blocco su un oggetto (perché sta cercando di entrare un blocco o un metodo synchronized
mentre un altro thread contiene già il blocco associato).
Questo non è uno stato di "monitoraggio"... Indica che il thread è nello stato Thread.State.BLOCKED
. Vedo che c'è un'altra buona risposta, ti indicherò solo questo link per una spiegazione più approfondita
Monitor significa che il thread è in attesa di raggiungere un blocco su un oggetto. Ad esempio, quando un thread esegue un metodo sincronizzato e un altro tenta di invocarlo sullo stesso oggetto, non sarà in grado di farlo fino al termine della prima chiamata del metodo. Questo perché il primo thread ha un monitor o un blocco su quell'oggetto, quindi il secondo deve attendere fino a quando non viene rilasciato.
Da Tutorial di threading Oracle:
"La sincronizzazione è stata creata attorno a un'entità interna nota come blocco intrinseco o blocco monitor. (La specifica API spesso si riferisce a questa entità semplicemente come " monitor.") I blocchi intrinseci svolgono un ruolo in entrambi gli aspetti della sincronizzazione: far rispettare l'accesso esclusivo allo stato di un oggetto e stabilire le relazioni prima che siano essenziali per la visibilità."