Что такое монитор на Java? - PullRequest
109 голосов
/ 29 июля 2010

Что такое монитор, упоминаемый в параллельном программировании на Java?

Когда я читаю, что «каждый объект связан с монитором», что это значит?

Это специальный объект?

Ответы [ 7 ]

75 голосов
/ 29 июля 2010

Монитор - это механизм управления одновременным доступом к объекту.

Это позволяет вам:

Тема 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, которые также используют монитор объекта для связи между различными потоками.

23 голосов
/ 29 июля 2010

Монитор - это объект, обладающий как блокировкой , так и набором ожидания . В Java любой Object может служить монитором.

Для подробного объяснения того, как мониторы работают в Java, я рекомендую прочитать Механика монитора раздела Параллельное программирование в Java (предыдущая ссылка отображает предварительный просмотр в книгах Google, и этот раздел доступен для чтения).

8 голосов
/ 17 января 2013
  1. Монитор - это концепция / механизм, который не ограничивается языком Java;
  2. "В параллельном программировании монитор - это объект или модуль, предназначенный для безопасного использования более чем одним потоком";
  3. Как знает каждый читатель, каждый объект в Java является подклассом java.lang.Object. Люди java сделали java.lang.Object таким образом, чтобы он имел особенности и характеристики, которые позволяют программистам Java использовать любой объект в качестве монитора. Например, каждый объект имеет очередь ожидания, очередь повторного входа и методы ожидания и уведомления, делающие его монитором;
  4. читайте о мониторах здесь .
4 голосов
/ 19 февраля 2017

Язык Java и система времени выполнения поддерживают синхронизацию потоков с помощью мониторов.
Монитор связан с конкретным элементом данных (переменной условия) и функционирует как блокировка этих данных.Когда поток удерживает монитор для какого-либо элемента данных, другие потоки блокируются и не могут проверять или изменять данные.

3 голосов
/ 29 июля 2010

http://java.sun.com/docs/books/jvms/second_edition/html/Concepts.doc.html#33308

A механизм для управления доступом к объектам по одному

2 голосов
/ 26 апреля 2018

Монитор - это конструкция синхронизации, которая позволяет потокам иметь как взаимное исключение, так и возможность ждать (блокировать), чтобы определенное условие стало истинным.

Мониторы также имеют механизм для оповещения других потоков о том, что их условие выполнено. Это сущность, которая обладает как блокировкой, так и набором ожидания. В Java любой объект может служить монитором.

В виртуальной машине Java каждый объект и класс логически связаны с монитором. Чтобы реализовать возможность взаимного исключения мониторов, блокировка (иногда называемая мьютексом) связана с каждым объектом и классом. В терминах операционных систем это называется семафором, мьютекс - это двоичный семафор.

Для получения дополнительной информации перейдите по ссылке

1 голос
/ 10 февраля 2018

http://journals.ecs.soton.ac.uk/java/tutorial/java/threads/monitors.html

монитор связан с объектом или элементом данных, который запрашивается, когда вводится элемент данных или объект, является блоком синхронизации (критическая секция) и освобождается при выходе.

...