В одной теме у меня есть
write a = 0
write a = 1
write volatile flag = 1
Во 2-й теме у меня есть
read volatile flag // This always happens after I write volatile flag in thread 1
read a
Может ли произойти переупорядочение, чтобы я увидел, что read a
возвращает 0 во 2-м потоке?
Если нет, может кто-нибудь, пожалуйста, подробно объяснить, почему?
Я спрашиваю, потому что я озадачен этим определением из JLS:
Среди всех межпоточных действий, выполняемых каждым потоком t, программный порядок t является общим порядком, отражающим порядок, в котором эти действия будут выполняться в соответствии с внутрипоточной семантикой t.
Как будто допускает переупорядочивание в данной ситуации?