Спецификация Java 11: 17.4.5. Порядок происходит-до (happens-before)

Два действия могут быть упорядочены отношениями "происходит-до". Если одно действие происходит раньше другого, то первое видимо и по порядку раньше второго. Если у нас есть два действия x и y, мы пишем hb(x, y), чтобы указать, что x происходит-до y. Если x и y являются действиями одного и того же потока и x стоит перед y в программном порядке, тогда hb(x, y). От конца конструктора объекта до начала финализатора (§12.6) для этого объекта существует граница "происходит-до". Если действие x синхронизируется со следующим действием y, то у нас также есть hb(x, y). Если hb(x, y) и hb(y, z), то hb(x, z). Методы wait класса Object (§17.2.1) имеют связанные с ними действия блокировки и разблокировки; их отношения "происходит-до" определяются этими связанными действиями. Следует отметить, что наличие связи между двумя действиями не обязательно означает, что они должны происходить в таком порядке в реализации. Если изменение порядка дает результаты, соответс...