Интерпретация «правила программного порядка» в параллелизме Java

Правила порядка программ состояний "Каждое действие в потоке происходит - перед каждым действием в этом потоке, которое происходит позже в порядке программы "

1. Я читаю в другомнить чтодействие является

читает и пишет в переменныеблокировка и разблокировка мониторовначало и соединение с потоками

Означает ли это, что чтение и запись могут быть изменены по порядку, но чтение и запись не могут изменить порядок с действиями, указанными во 2-й или 3-й строках?

2.Что делает "программа заказа " имею в виду?

Объяснение с примерами было бы очень полезно.

Дополнительный связанный вопрос

Предположим, у меня есть следующий код:

long tick = System.nanoTime(); //Line1: Note the time
//Block1: some code whose time I wish to measure goes here
long tock = System.nanoTime(); //Line2: Note the time

Во-первых, этоs однопоточное приложение для простоты Компилятор отмечает, что ему нужно дважды проверить время, а также блок кода, который не зависит от окружающих строк, отмечающих время, поэтому он видит потенциал для реорганизации кода, что может привести к тому, что Block1 не будет окружен вызовами синхронизации во время фактического выполнения (например, рассмотрим этот порядок Line1->Line2->Block1). Но я, как программист, могу видеть зависимость между Line1,2 и Block1. Строка 1 должна непосредственно предшествовать блоку 1, блоку 1 требуется конечное количество времени для завершения, и сразу же следует строка 2.

Итак, мой вопрос: правильно ли я измеряю блок?

Если да, что мешает компилятору изменить порядок.Если нет (то есть думаю, что это правильно после прохождения Enno 's ответ) что я могу сделать, чтобы предотвратить это.

П.С .: Я украл этот код уДругой вопрос Я недавно спросил в ТАК.

Ответы на вопрос(5)

Ваш ответ на вопрос