Spec-Zone .ru
спецификации, руководства, описания, API
Содержание | Предыдущий | Следующий | ИндексСпецификация Виртуальной машины JavaTM


A B C D F Г Я J L М. N P R S T W

monitorenter

Работа

Введите монитор для объекта

Формат

monitorenter

Формы

monitorenter = 194 (0xc2)

Стек операнда

..., objectref...

Описание

objectref должен иметь тип reference.

Каждому объекту связали монитор с этим. Поток, который выполняет владение усилений monitorenter монитора, связанного с objectref. Если другому потоку уже принадлежит монитор, связанный с objectref, текущий поток ожидает, пока объект не разблокирован, то попробовал еще раз получать владение. Если текущему потоку уже принадлежит монитор, связанный с objectref, это постепенно увеличивает счетчик в мониторе, указывающем на число раз, этот поток ввел монитор. Если монитор, связанный с objectref, не принадлежит никакому потоку, текущий поток становится владельцем монитора, устанавливая количество записи этого монитора к 1.

Исключение на этапе выполнения

Если objectref null, monitorenter бросает a NullPointerException.

Примечания

Для получения дальнейшей информации о потоках и мониторах в виртуальной машине Java, см. Главу 8, "Потоки и Блокировки."

monitorenter инструкция может использоваться с одной или более monitorexit инструкциями, чтобы реализовать a synchronized оператор в языке программирования Java. monitorenter и monitorexit инструкции не используются в реализации synchronized методы, хотя они могут использоваться, чтобы обеспечить эквивалентную семантику блокировки; однако, контролируйте запись на вызове a synchronized метод обрабатывается неявно инструкциями вызова метода виртуальной машины Java. См. Раздел 7.14 для получения дополнительной информации об использовании monitorenter и monitorexit инструкций.

Ассоциацией монитора с объектом можно управлять различными способами, которые выходят за рамки этой спецификации. Например, монитор может быть выделен и освобожден одновременно как объект. Альтернативно, это может быть динамически выделено в то время, когда поток пытается получить эксклюзивный доступ к объекту и освобожденный в некоторое более позднее время, когда никакой поток не остается в мониторе для объекта.

Конструкции синхронизации языка программирования Java требуют поддержки операций на мониторах помимо записи и выхода. Они включают ожидание на мониторе (Object.wait) и уведомление других потоков, ожидающих на мониторе (Object.notifyAll и Object.notify). Эти операции поддерживаются в стандартном пакете java.lang предоставленный виртуальной машиной Java. Никакая явная поддержка этих операций не появляется в наборе команд виртуальной машины Java.


monitorexit

Работа

Монитор выхода для объекта

Формат

monitorexit

Формы

monitorexit = 195 (0xc3)

Стек операнда

..., objectref...

Описание

objectref должен иметь тип reference.

Текущий поток должен быть владельцем монитора, связанного с экземпляром, на который ссылается objectref. Поток постепенно уменьшает счетчик, указывающий на число раз, это ввело этот монитор. Если в результате значение счетчика становится нулем, текущий поток выпускает монитор. Если монитор, связанный с objectref, становится свободным, другим потокам, которые ожидают, чтобы получить тот монитор, позволяют попытаться сделать так.

Исключения на этапе выполнения

Если objectref null, monitorexit бросает a NullPointerException.

Иначе, если текущий поток не является владельцем монитора, monitorexit бросает IllegalMonitorStateException.

Иначе, если реализация виртуальной машины осуществляет правила о структурированном использовании блокировок, описанных в Разделе 8.13 и если второе из тех правил нарушается выполнением этой monitorexit инструкции, то monitorexit бросает IllegalMonitorStateException.

Примечания

Для получения дальнейшей информации о потоках и мониторах в виртуальной машине Java, см. Главу 8, "Потоки и Блокировки."

Одна или более monitorexit инструкций могут использоваться с monitorenter инструкцией, чтобы реализовать a synchronized оператор в языке программирования Java. monitorenter и monitorexit инструкции не используются в реализации synchronized методы, хотя они могут использоваться, чтобы обеспечить эквивалентную семантику блокировки.

Виртуальная машина Java поддерживает исключения, выданные в пределах synchronized методы и synchronized операторы по-другому. Выход монитора на нормальном synchronized завершение метода обрабатывается инструкциями возврата виртуальной машины Java. Выход монитора на резком synchronized завершение метода обрабатывается неявно athrow инструкцией виртуальной машины Java. Когда исключение выдается изнутри a synchronized оператор, выйдите от монитора, вводимого до выполнения synchronized оператор достигается, используя механизм обработки исключений виртуальной машины Java. См. Раздел 7.14 для получения дополнительной информации об использовании monitorenter и monitorexit инструкций.


multianewarray

Работа

Создайте новый многомерный массив

Формат

multianewarray
indexbyte1
indexbyte2
размерности

Формы

multianewarray = 197 (0xc5)

Стек операнда

..., count1, [count2...]..., arrayref

Описание

Операнд размерностей является байтом без знака, который должен быть больше чем или равным 1. Это представляет число размерностей массива, чтобы быть созданным. Стек операнда должен содержать значения размерностей. Каждое такое значение представляет число компонентов в размерности массива, чтобы быть созданным, должен иметь тип int, и должно быть неотрицательным. count1 является требуемой длиной в первой размерности, count2 во втором, и т.д..

Все значения количества выталкиваются от стека операнда. indexbyte1 без знака и indexbyte2 используются, чтобы создать индекс в пул константы этапа выполнения текущего класса (§3.6), где значение индекса (indexbyte1 << 8) | indexbyte2. Элемент пула константы этапа выполнения по индексу должен быть символьной ссылкой на класс, массив, или интерфейсный тип. Именованный класс, массив, или интерфейсный тип разрешаются (§5.4.3.1). Получающаяся запись должна быть типом класса массива размерности, больше чем или равный размерностям.

Новый многомерный массив типа массива выделяется от собранной "мусор" "кучи". Если какое-либо значение количества является нулем, никакие последующие размерности не выделяются. Компоненты массива в первой размерности инициализируются к подмассивам типа второй размерности и так далее. Компоненты последней выделенной размерности массива инициализируются к начальному значению по умолчанию для типа компонентов (§2.5.1). A reference arrayref новому массиву продвигается на стек операнда.

Соединение Исключений

Во время разрешения символьной ссылки на класс, массив, или интерфейсный тип, может быть выдано любое из исключений, задокументированных в Раздел 5.4.3.1.

Иначе, если у текущего класса нет разрешения, чтобы получить доступ к типу элемента разрешенного класса массива, multianewarray бросает IllegalAccessError.

Исключение на этапе выполнения

Иначе, если какое-либо из значений размерностей на стеке операнда является меньше чем нуль, multianewarray инструкция бросает a NegativeArraySizeException.

Примечания

Может быть более эффективно использовать newarray или anewarray, создавая массив единственной размерности.

У класса массива, на который ссылаются через пул константы этапа выполнения, может быть больше размерностей чем операнд размерностей multianewarray инструкции. В этом случае только первые размерности размерностей массива создаются.


Содержание | Предыдущий | Следующий | Индекс

Спецификация Виртуальной машины JavaTM
Авторское право © Sun Microsystems, Inc 1999 года. Все права защищены
Пожалуйста, отправьте любые комментарии или исправления к jvm@java.sun.com

free hit counter