Profilowanie Java JVM, status wątku - co oznacza status „Monitor”?

81

wprowadź opis obrazu tutaj

Używam visualVM podłączam wielowątkową aplikację Java, wątek ma status 4, a mianowicie działa, śpi, czekaj, monitor. Co oznacza ten stan monitorowania? Jaka jest różnica między czekaniem a monitorem?

user84592
źródło

Odpowiedzi:

89

Te stany są takie same, jak wymienione w Thread.Statewyliczeniu. „Czekaj” oznacza, jak mówi dokumentacja:

Wątek jest w stanie oczekiwania z powodu wywołania jednej z następujących metod:

  • Object.wait bez limitu czasu
  • Thread.join bez limitu czasu
  • LockSupport.park

„Monitor” to BLOCKEDstan, w którym wątek oczekuje na uzyskanie blokady obiektu (ponieważ próbuje wejść do synchronizedbloku lub metody, podczas gdy inny wątek już posiada skojarzoną blokadę).

Jesper
źródło
24
Każdemu nowemu tematowi (np. OP) może przydać się, aby wiedzieć, że „monitor” jest tu i w dokumentacji używane jako synonim „blokady”.
mat b
6
Czy w ogóle można wiedzieć, który zsynchronizowany obiekt (lub wiersz kodu) jest tym, który powoduje ZABLOKOWANIE / Monitorowanie wątku?
user123321
3
@ user123321 Możesz zrobić zrzut wątku. (Przycisk w prawym górnym rogu zakładki „Wątki”). Tam możesz zobaczyć, z czym wątek próbuje się zsynchronizować i który wątek posiada blokadę.
Fildor,
Jaka jest różnica między sleepingi waitingpokazanymi na zrzucie ekranu ?!
Muhammad Gelbana
7

To nie jest stan „monitorowania” ... Wskazuje, że wątek jest w Thread.State.BLOCKEDstanie. Widzę, że jest inna dobra odpowiedź, po prostu wskażę ten link, aby uzyskać głębsze wyjaśnienie

Grooveek
źródło
5

Monitor oznacza, że ​​wątek oczekuje na osiągnięcie blokady obiektu. Na przykład, gdy jeden wątek uruchamia metodę zsynchronizowaną, a inny próbuje wywołać ją na tym samym obiekcie, nie będzie mógł tego zrobić, dopóki pierwsze wywołanie metody nie zostanie zakończone. Dzieje się tak, ponieważ pierwszy wątek ma monitor lub blokadę tego obiektu, więc drugi musi poczekać, aż zostanie zwolniony.

Z samouczków Oracle Threading :

„Synchronizacja jest zbudowana wokół jednostki wewnętrznej znanej jako blokada wewnętrzna lub blokada monitora. (Specyfikacja interfejsu API często odnosi się do tej jednostki po prostu jako„ monitor ”). Blokady wewnętrzne odgrywają rolę w obu aspektach synchronizacji: wymuszanie wyłącznego dostępu do stan obiektu i ustanowienie relacji wydarzyło się przed, które są niezbędne dla widoczności ”.

mogronalol
źródło