Se o Thread B deseja ver as alterações que o Thread A faz, apenas a última alteração pode ser uma variável volátil em oposição a todo
Eu olhei paraesta resposta e indica como:
Sob o novo modelo de memória, quando o segmento A grava em uma variável volátil V e o segmento B lê em V, todos os valores de variáveis que estavam visíveis para A no momento em que V foi gravado agora estão garantidos para B.
Portanto, dado o exemplo:
public class Main {
static int value = -1;
static volatile boolean read;
public static void main(String[] args) {
Thread a = new Thread(() -> {
value = 1;
read = true;
});
Thread b = new Thread(() -> {
while (!read);
System.out.println("Value: " + value);
});
a.start();
b.start();
}
}
A alteração paravalue
(de -1 a 1) garantido para ser visível no segmento b, apesar da não volatilidade devalue
(sóread
)?
Se assim, dadas várias alterações executadas com a intenção de serem visíveis para outra thread, existe alguma finalidade em tornar qualquer variável alterada diferente da última volátil?