Какой монитор называется в параллельном программировании на 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
методы , которые будут также использовать монитор объекта для связи между различными потоками.
Class
объектом для статических методов. Если у вас уже есть синхронизированный method1 () и вы объявляете method2 () synchronized, новые мониторы не создаются, и фактически вызов любого метода (для того же объекта) будет пытаться заблокировать тот же монитор. Это часто ловит новичков.
Монитор - это объект, который имеет как блокировку, так и набор ожидания . В Java любой Object
может служить монитором.
Для подробного объяснения того, как мониторы работают в Java, я рекомендую прочитать раздел « Механика монитора » Параллельного программирования на Java (предыдущая ссылка отображает предварительный просмотр в книгах Google, и этот раздел доступен для чтения).
Wakes up all threads that are waiting on this object's monitor.
о notifyall (), я получаю, что объект поддерживает (с помощью внутреннего объекта / объекта), что все потоки ждут блокировки, этот внутренний объект / объект называется монитором?
Язык Java и система времени выполнения поддерживают синхронизацию потоков с помощью мониторов.
Монитор связан с конкретным элементом данных (условной переменной) и действует как блокировка этих данных. Когда поток удерживает монитор для некоторого элемента данных, другие потоки блокируются и не могут проверять или изменять данные.
http://java.sun.com/docs/books/jvms/second_edition/html/Concepts.doc.html#33308
Механизм для контроля доступа к объектам по одному
Монитор - это конструкция синхронизации, которая позволяет потокам иметь как взаимное исключение, так и возможность ожидания (блокирования) выполнения определенного условия.
У мониторов также есть механизм для сигнализации другим потокам о том, что их условие выполнено. Это объект, который имеет как блокировку, так и набор ожидания. В Java любой объект может служить монитором.
В виртуальной машине Java каждый объект и класс логически связаны с монитором. Чтобы реализовать возможность взаимного исключения мониторов, с каждым объектом и классом связывается блокировка (иногда называемая мьютексом). В терминах операционных систем это называется семафором, мьютекс - это двоичный семафор.
http://journals.ecs.soton.ac.uk/java/tutorial/java/threads/monitors.html
Монитор связан с объектом или элементом данных, который запрашивается, когда элемент данных или объект вводится, является блоком синхронизации (критическая секция) и освобождается при выходе.