У меня вопрос о Java Memory Model.Случайте до отношений в Java Memory Model
В следующем сценарии: начальный: a = 0; b = 0;
T1:
a = 1;
l.lock();
b = 1;
l.unlock();
T2:
l.lock();
read b;
l.unlock();
read a;
Могу ли я сказать, если значение b
прочитана T2
является 1
, то значение a
прочитано T2
должно быть 1
?
В моем понимании, что unlock
в T1
флеши как значение a
и b
в основную память, а lock
в T2
убеждается как read a
и read b
можете получить последнее значение.
Я прав?
Редактировать: Я просто указал, что они заблокированы на одной и той же блокировке.
Что вы запираете? –
@SotiriosDelimanolis, не имеет значения. В Java код будет выглядеть как 'a = 1; синхронизировано (o) {b = 1; } 'и' synchronized (o) {x = b; } y = a; 'для некоторого общего объекта' o'. – aioobe
@aioobe Если бы они были «синхронизированы» на разных объектах, будет ли поведение одинаковым? –