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?

questionAnswers(1)

yourAnswerToTheQuestion