web-dev-qa-db-fra.com

Java profilage JVM, état du thread - que signifie le statut "Monitor"?

enter image description here

J'utilise visualVM connect a multi thread Java application, thread has 4 status,

77
user84592

Ces états sont les mêmes que ceux mentionnés dans les Thread.State énumération. "Attendre" signifie, comme l'indique la documentation:

Un thread est en attente en raison de l'appel d'une des méthodes suivantes:

  • Object.wait sans délai d'attente
  • Thread.join sans délai d'attente
  • LockSupport.park

"Monitor" est l'état BLOCKED, dans lequel le thread attend pour obtenir un verrou sur un objet (car il essaie d'entrer un bloc ou une méthode synchronized alors qu'un autre thread détient déjà le verrou associé).

85
Jesper

Ce n'est pas un état de "surveillance" ... Il indique que le thread est dans le Thread.State.BLOCKED Etat. Je vois qu'il y a une autre bonne réponse, je vais juste vous indiquer ce lien pour une explication plus approfondie

7
Grooveek

Moniteur signifie que le thread attend pour atteindre un verrou sur un objet. Par exemple, lorsqu'un thread exécute une méthode synchronisée et qu'un autre essaie de l'appeler sur le même objet, il ne pourra pas le faire avant la fin du premier appel de la méthode. C'est parce que le premier thread a un moniteur ou un verrou sur cet objet, donc le second doit attendre qu'il soit libéré.

De Oracle Threading Tutorials :

"La synchronisation est construite autour d'une entité interne connue sous le nom de verrou intrinsèque ou verrou de moniteur. (La spécification API fait souvent référence à cette entité simplement comme un" moniteur ".) Les verrous intrinsèques jouent un rôle dans les deux aspects de la synchronisation: en imposant un accès exclusif à un l'état de l'objet et l'établissement de relations avant-avant qui sont essentielles à la visibilité. "

5
mogronalol