Спецификация Java 11: 17.4.4. Порядок синхронизации
У каждого выполнения есть порядок синхронизации. Порядок синхронизации - это общий порядок всех действий синхронизации выполнения. Для каждого потока t порядок синхронизации действий синхронизации (§17.4.2) в t согласуется с программным порядком (§17.4.3) t.
Действия синхронизации порождают отношение synchronized-with (синхронизирован-с) для действий, определяемое следующим образом:
- Действие разблокировки на мониторе m синхронизируется-со всеми последующими действиями блокировки на m (где "последующие" определены в соответствии с порядком синхронизации).
- Запись в изменчивую (volatile) переменную v (§8.3.1.4) синхронизируется-со всеми последующими чтениями v любым потоком (где "последующие" определены в соответствии с порядком синхронизации).
- Действие, запускающее поток, синхронизируется с первым действием в потоке, которое оно запускает.
- Запись значения по умолчанию (ноль, false или null) в каждую переменную синхронизируется с первым действием в каждом потоке.
Хотя может показаться немного странным записывать значение по умолчанию в переменную до выделения объекта, содержащего переменную, концептуально каждый объект создается в начале программы с инициализированными значениями по умолчанию. - Последнее действие в потоке T1 синхронизируется с любым действием в другом потоке T2, которое обнаруживает, что T1 завершился.
T2 может сделать это, вызвав T1.isAlive() или T1.join(). - Если поток T1 прерывает поток T2, прерывание T1 синхронизируется с любой точкой, в которой любой другой поток (включая T2) определяет, что T2 был прерван (сгенерировано InterruptedException или вызвано Thread.interrupted или Thread.isInterrupted).
Источник синхронизируется-с стороны называется освобождением (release), а место назначения - получением (acquire).
Читайте также:
- Спецификация Java 11: 17.4. Модель памяти
- Спецификация Java 11: 17.4.1. Общие переменные. 17.4.2. Действия
- Спецификация Java 11: 17.4.3. Программы и порядок программ
Комментарии
Отправить комментарий