Что монитор упомянут в параллельном программировании в Java?
Когда я считал, что "каждый объект связал монитор", что делает это означающий?
Действительно ли это - специальный объект?
Монитор - это механизм для управления одновременным доступом к объекту.
Это позволяет вам делать:
Поток 1:
public void a()
{
synchronized(someObject) {
// do something (1)
}
}
Поток 2:
public void b()
{
synchronized(someObject) {
// do something else (2)
}
}
Это предотвращает одновременный доступ потоков 1 и 2 к отслеживаемой (синхронизированной) секции. Один запустится, и монитор не позволит другому получить доступ к региону до того, как закончится первый.
Это не особый объект. Это механизм синхронизации, расположенный в корне иерархии классов: java.lang.Object
.
Существуют также методы wait
и notify
, которые также будут использовать монитор объекта для связи между различными потоками.
Монитор - это объект, который обладает как блокировкой , так и набором ожидания . В Java любой объект
может служить монитором.
Для подробного объяснения того, как мониторы работают в Java, я рекомендую прочитать раздел Monitor Mechanics в Concurrent Programming in Java (предыдущая ссылка отображает предварительный просмотр в книгах Google, и этот раздел доступен для чтения).
http://java.sun.com/docs/books/jvms/second_edition/html/Concepts.doc.html#33308
Механизм для управления доступ к объектам по одному