Спецификация 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).


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки