Профілювання Java JVM, стан потоку - що означає статус “Монітор”?


81

введіть тут опис зображення

Я використовую visualVM для підключення багатопотокової програми Java, потік має 4 статуси, а саме працює, сплячий, чекає, монітор. Що означає цей статус моніторингу? Яка різниця між очікуванням та монітором?

Відповіді:


89

Ці стани такі самі, як зазначено у Thread.Stateпереліку. "Чекати" означає, як сказано в документації:

Потік знаходиться в стані очікування через виклик одного з наступних методів:

  • Object.wait без тайм-ауту
  • Thread.join без тайм-ауту
  • LockSupport.park

"Монітор" - це BLOCKEDстан, в якому потік чекає отримання блокування для об'єкта (оскільки він намагається ввести synchronizedблок або метод, тоді як інший потік вже містить відповідний замок).


24
Будь-кому новому в цій темі (як, наприклад, OP) може бути корисно знати, що "монітор" використовується як синонім "блокування" тут і в документації.
matt b

6
Чи можна взагалі знати, який синхронізований об’єкт (або рядок коду) є тим, що призводить до блокування потоку / монітора?
user123321

3
@ user123321 Ви можете зробити дамп потоку. (Кнопка у верхньому правому куті вкладки "нитки".) Там ви можете побачити, з чим потік намагається синхронізуватись і який потік утримує замок.
Fildor

І в чому різниця між sleepingі waitingпоказаним на скріншоті ?!
Мухаммед Гелбана,

7

Це не статус "моніторингу" ... Це вказує на те, що нитка знаходиться у Thread.State.BLOCKEDстані. Я бачу, що є ще одна хороша відповідь, я просто вкажу вам на це посилання для більш глибокого пояснення


5

Монітор означатиме, що потік чекає, щоб досягти блокування об’єкта. Наприклад, коли в одному потоці запущений синхронізований метод, а інший намагається викликати його на тому самому об’єкті, він не зможе, поки не буде завершено перше виклик методу. Це пов’язано з тим, що перший потік має монітор або блокування на цьому об’єкті, тому другий повинен почекати, поки він звільниться.

З підручників Oracle Threading :

"Синхронізація будується навколо внутрішньої сутності, відомої як внутрішній замок або блокування монітора. (Специфікація API часто позначає цю сутність просто як" монітор ".) Внутрішні блокування відіграють певну роль в обох аспектах синхронізації: забезпечуючи ексклюзивний доступ до стан об'єкта та встановлення стосунків, що відбуваються раніше, що є важливими для видимості ".

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.