Что такое монитор в Java?

Что монитор упомянут в параллельном программировании в Java?

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

Действительно ли это - специальный объект?

115
задан nbro 16 December 2015 в 14:03
поделиться

3 ответа

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

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

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

80
ответ дан 24 November 2019 в 02:28
поделиться

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

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

24
ответ дан 24 November 2019 в 02:28
поделиться

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

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

3
ответ дан 24 November 2019 в 02:28
поделиться