Какой монитор в Java?

Какой монитор упоминается при параллельном программировании в Java?

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

Является ли это особым объектом?

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

Ответ 6

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

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

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

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

Ответ 7

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

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