Какой монитор упоминается при параллельном программировании в Java?
Когда я читаю, что "каждый объект связан с монитором", что это значит?
Является ли это особым объектом?
Какой монитор упоминается при параллельном программировании в 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 любой Object
может служить в качестве монитора.
Подробное объяснение того, как работают мониторы в Java, я рекомендую прочитать раздел Механика мониторинга Параллельное программирование в Java (предыдущая ссылка отображает предварительный просмотр в книгах Google, и этот раздел доступен для чтения).
Язык Java и среда выполнения поддерживают синхронизацию потоков с помощью мониторов.
Монитор связан с конкретным элементом данных (переменная условия) и функционирует как блокировка этих данных. Когда поток держит монитор для некоторого элемента данных, другие потоки блокируются и не могут проверять или изменять данные.
http://java.sun.com/docs/books/jvms/second_edition/html/Concepts.doc.html#3330 8
A механизм для контроля доступа к объектам по очереди
Монитор - это конструкция синхронизации, которая позволяет потокам иметь как взаимное исключение, так и возможность ждать (блокировать), чтобы определенное условие стало истинным.
Мониторы также имеют механизм для оповещения других потоков о том, что их условие выполнено. Это сущность, которая обладает как блокировкой, так и набором ожидания. В Java любой объект может служить монитором.
В виртуальной машине Java каждый объект и класс логически связаны с монитором. Чтобы реализовать возможность взаимного исключения мониторов, блокировка (иногда называемая мьютексом) связана с каждым объектом и классом. В терминах операционных систем это называется семафором, мьютекс - это двоичный семафор.
http://journals.ecs.soton.ac.uk/java/tutorial/java/threads/monitors.html
монитор связывается с объектом или элементом данных, который запрашивается, когда вводится элемент данных или объект, является блоком синхронизации (критическая секция) и освобождается при выходе.