- Class Monitor
- Field Summary
- Constructor Summary
- Method Summary
- Methods declared in class javax.management.NotificationBroadcasterSupport
- Methods declared in class java.lang.Object
- Field Details
- capacityIncrement
- elementCount
- alreadyNotified
- alreadyNotifieds
- server
- RESET_FLAGS_ALREADY_NOTIFIED
- OBSERVED_OBJECT_ERROR_NOTIFIED
- OBSERVED_ATTRIBUTE_ERROR_NOTIFIED
- OBSERVED_ATTRIBUTE_TYPE_ERROR_NOTIFIED
- RUNTIME_ERROR_NOTIFIED
- dbgTag
- Constructor Details
- Monitor
- Method Details
- preRegister
- postRegister
- preDeregister
- postDeregister
- start
- stop
- getObservedObject
- setObservedObject
- addObservedObject
- removeObservedObject
- containsObservedObject
- getObservedObjects
- getObservedAttribute
- setObservedAttribute
- getGranularityPeriod
- setGranularityPeriod
- isActive
- Мютекс и монитор
- Java monitor что это
Class Monitor
Defines the part common to all monitor MBeans. A monitor MBean monitors values of an attribute common to a set of observed MBeans. The observed attribute is monitored at intervals specified by the granularity period. A gauge value (derived gauge) is derived from the values of the observed attribute.
Field Summary
The amount by which the capacity of the monitor arrays are automatically incremented when their size becomes greater than their capacity.
Flag denoting that a notification has occurred after changing the observed object or the observed attribute.
Flag denoting that a notification has occurred after changing the observed object or the observed attribute.
Constructor Summary
Method Summary
Allows the monitor MBean to perform any operations needed after having been unregistered by the MBean server.
Allows the monitor MBean to perform any operations needed after having been registered in the MBean server or after the registration has failed.
Allows the monitor MBean to perform any operations it needs before being unregistered by the MBean server.
Allows the monitor MBean to perform any operations it needs before being registered in the MBean server.
Methods declared in class javax.management.NotificationBroadcasterSupport
Methods declared in class java.lang.Object
Field Details
capacityIncrement
The amount by which the capacity of the monitor arrays are automatically incremented when their size becomes greater than their capacity.
elementCount
alreadyNotified
alreadyNotifieds
Selected monitor errors that have already been notified. Each element in this array corresponds to an observed object in the vector. It contains a bit mask of the flags OBSERVED_OBJECT_ERROR_NOTIFIED etc, indicating whether the corresponding notification has already been sent for the MBean being monitored.
server
Reference to the MBean server. This reference is null when the monitor MBean is not registered in an MBean server. This reference is initialized before the monitor MBean is registered in the MBean server.
RESET_FLAGS_ALREADY_NOTIFIED
OBSERVED_OBJECT_ERROR_NOTIFIED
Flag denoting that a notification has occurred after changing the observed object. This flag is used to check that the new observed object is registered in the MBean server at the time of the first notification.
OBSERVED_ATTRIBUTE_ERROR_NOTIFIED
Flag denoting that a notification has occurred after changing the observed attribute. This flag is used to check that the new observed attribute belongs to the observed object at the time of the first notification.
OBSERVED_ATTRIBUTE_TYPE_ERROR_NOTIFIED
Flag denoting that a notification has occurred after changing the observed object or the observed attribute. This flag is used to check that the observed attribute type is correct (depending on the monitor in use) at the time of the first notification.
RUNTIME_ERROR_NOTIFIED
Flag denoting that a notification has occurred after changing the observed object or the observed attribute. This flag is used to notify any exception (except the cases described above) when trying to get the value of the observed attribute at the time of the first notification.
dbgTag
Constructor Details
Monitor
Method Details
preRegister
Allows the monitor MBean to perform any operations it needs before being registered in the MBean server. Initializes the reference to the MBean server.
postRegister
Allows the monitor MBean to perform any operations needed after having been registered in the MBean server or after the registration has failed. Not used in this context.
preDeregister
Allows the monitor MBean to perform any operations it needs before being unregistered by the MBean server. Stops the monitor.
postDeregister
Allows the monitor MBean to perform any operations needed after having been unregistered by the MBean server. Not used in this context.
start
stop
getObservedObject
Returns the object name of the first object in the set of observed MBeans, or null if there is no such object.
setObservedObject
addObservedObject
removeObservedObject
containsObservedObject
getObservedObjects
getObservedAttribute
Gets the attribute being observed.
The observed attribute is not initialized by default (set to null).
setObservedAttribute
getGranularityPeriod
Gets the granularity period (in milliseconds).
The default value of the granularity period is 10 seconds.
setGranularityPeriod
Sets the granularity period (in milliseconds).
The default value of the granularity period is 10 seconds.
isActive
Tests whether the monitor MBean is active. A monitor MBean is marked active when the start method is called. It becomes inactive when the stop method is called.
Report a bug or suggest an enhancement
For further API reference and developer documentation see the Java SE Documentation, which contains more detailed, developer-targeted descriptions with conceptual overviews, definitions of terms, workarounds, and working code examples. Other versions.
Java is a trademark or registered trademark of Oracle and/or its affiliates in the US and other countries.
Copyright © 1993, 2023, Oracle and/or its affiliates, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
All rights reserved. Use is subject to license terms and the documentation redistribution policy.
Мютекс и монитор
В своих предыдущих лекциях я иногда использовала слова «мютекс» и «монитор», теперь настало время рассказать, что же это значит.
— Мютекс – это специальный объект для синхронизации нитей/процессов. Он может принимать два состояния – занят и свободен. Если упростить, то мютекс – это boolean-переменная, которая принимает два значения: занят(true) и свободен(false).
Когда нить хочет монопольно владеть некоторым объектом, она помечает его мютекс занятым, а когда закончила работу с ним – помечает его мютекс свободным.
— Т.е. мютекс – это как табличка на двери – занят/свободен?
— Да. И такой мютекс прикреплен к каждому объекту в Java. Прямой доступ к мютексу есть только у Java-машины. От программиста он скрыт.
— А как же тогда его использовать?
— А работать с мютексом в Java можно посредством монитора.
Монитор – это специальный механизм (кусок кода) – надстройка над мютексом, который обеспечивает правильную работу с ним. Ведь мало пометить, что объект – занят, надо еще обеспечить, чтобы другие нити не пробовали воспользоваться занятым объектом.
В Java монитор реализован с помощью ключевого слова synchronized.
Когда ты пишешь блок synchronized, то компилятор Java заменяет его тремя кусками кода:
1) В начале блока synchronized добавляется код, который отмечает мютекс как занятый.
2) В конце блока synchronized добавляется код, который отмечает мютекс как свободный.
3) Перед блоком synchronized добавляется код, который смотрит, если мютекс занят – то нить должна ждать его освобождения.
Вот как это примерно работает:
synchronized(object) object.doJob(); >
while (object.mutex) Thread.sleep(1); object.mutex = true; object.doJob(); object.mutex = false;
На самом деле логика там другая и сложнее, но это уже детали.
— Пока не научишься правильно этим пользоваться – в детали лезть нет смысла.
Пару уровней назад я дала тебе список всех состояний нити со стрелками переходов и списком методов, которые влияют на это состояние. Ты много запомнил?
— Не очень. Просто все быстро забывается…
— Чем меньше практики, тем меньше пользы и от теории.
Вот уровню к 40 научишься всем этим пользоваться, и я тебе объясню, как все устроено на самом деле. А пока — учись просто правильно всем пользоваться. Ясно?
Java monitor что это
В Java ключевое слово synchronized используется для обеспечения взаимного исключения и гарантирует, что только один поток может получить доступ к критической секции кода в данный момент. Ключевое слово synchronized может использоваться с блоком кода или методом, и оно использует монитор объекта для синхронизации. В Java монитор — это синхронизационный конструкт, который ассоциирован с объектом. Каждый объект в Java имеет встроенный монитор, который можно использовать для синхронизации доступа к методам и полям этого объекта. Когда поток входит в синхронизированный блок кода или метод, он получает монитор, связанный с объектом, и удерживает его до тех пор, пока не выйдет из блока кода или метода. Мьютекс — это синхронизационный примитив, который используется для защиты общих ресурсов от одновременного доступа нескольких потоков. В Java ключевое слово synchronized может использоваться для обеспечения взаимного исключения, что аналогично функциональности мьютекса. Семафор — это синхронизационный примитив, который используется для управления доступом к общему ресурсу. В Java класс Semaphore может использоваться для реализации семафоров, которые можно использовать для контроля доступа к общим ресурсам несколькими потоками. Таким образом, ключевое слово synchronized использует монитор объекта, который аналогичен мьютексу. Оно не использует семафор напрямую, но семафор можно реализовать с помощью класса Semaphore в Java.
Странно, что в «Философия Java» Брюса Эккеля (4 издание) дают определения мьютекса и монитора наоборот: мьютекс — это механизм блокировки, а монитор — флаг, который используется для того, чтобы показать, что ресурс заблокирован: > Для решения проблемы соперничества потоков фактически все многопоточные схемы синхронизируют доступ к разделяемьм ресурсам. Это означает, что доступ к разделяемому ресурсу в один момент времени может получить только одна задача. Чаще всего это выполняется помещением фрагмента кода в предложение блокировки так, что одновременно пройти по этому фрагменту кода может только одна задача. Поскольку такое предложение блокировки дает эффект взаимного исключения (mutual exclusion), этот механизм часто называют мьютексом (mutex). > Каждый объект содержит объект простой блокировки (также называемый монитором), который автоматически является частью этого объекта (вам не придется писать для нее специального кода). Когда вы вызываете любой синхронизированный (synchronized) метод, объект переходит в состояние блокировки, и пока этот метод не закончит свою работу и не снимет блокировку, другие синхронизированные методы для объекта не могут быть вызваны.
Написано хорошо, понятно, но мне кажется, в конце немного понятия перепутаны. В статье написано, что мьютекс — это одноместный семафор, но судя по всему предыдущему объяснению, одноместным семафором является не мьютекс, а монитор. А мьютекс — это понятие, сходное не с семафором, а с разрешениями, которые семафор выдает. То есть, у монитора — один мьютекс, Соответственно, работает с данным кодом в один момент времени не более 1 потока. У семафора N разрешений. Соответственно, работают с данным кодом в один момент времени не более N потоков.
Монитор — невидимый для программиста кусок кода исполняемый jvm. Ну как бы и в чём прикол? Ну типа есть много всякого скрытого кода связанного с ключевыми словами или с другими языками программирования, это очевидно вроде. Но почему именно этот код имеет отдельное название и целое объяснение-пояснение. Есть умные люди в чате?) Объясните please зачем это знать 🙏
Прочитал несколько источников и понял так: Synchronized — ключевое слово, указывающее что для потоков, работающих с этим объектом/блоком кода, будет применяться механизм управления потоками (монитор).
Объект, указанный в ( ) содержит в себе маркер и может иметь 2 состояния: закрыт/открыт. Когда поток доходит до синхронизированного объекта/кода, он обращается к маркеру и запрашивает состояние. Это состояние контролирует монитор. Т.е. маркеры переключает монитор, а запрос делает поток. > Монитор — механизм контроля потоков при работе с сихронизированным объектом. Есть 2 типа механизма (монитора): мьютекс и семафор. 1. Механизм мьютекса ограничивает доступ к объекту/коду до 1 потока, т.е. одновременно с объектом может работать 1 поток. 2. Механизм семафора ограничивает доступ до N-го количества потоков одновременно, т.е. можно задать количество потоков. Мьютекс используется по умолчанию, а для задействования семафора нужно инициализировать класс Semaphor. У семафора через объект Semaphor можно настраивать: — количество потоков, которые могут одновременно работать с объектом;
Semaphore(int permits) // конструктор
— очередность работы потоков с объектом: последовательно (первый пришел — первый приступил к работе) или управление полностью отдается планировщику.
Semaphore(. boolean fair) // конструктор