Si el Hilo B desea ver los cambios que realiza el Hilo A, ¿solo el último cambio puede ser una variable volátil en lugar de todos?

He mirado aesta respuesta, y establece cómo:

En el nuevo modelo de memoria, cuando el subproceso A escribe en una variable volátil V y el subproceso B lee desde V, cualquier valor de variable que fuera visible para A en el momento en que se escribió V se garantiza que ahora sea visible para B.

Por lo tanto, dado el ejemplo:

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();
    }
}

Es el cambio avalue (de -1 a 1) garantizado para ser visible en el hilo b a pesar de la no volatilidad devalue (solamenteread)?

Si es así, dados un montón de cambios que se realizan con la intención de ser visibles para otro hilo, ¿hay algún propósito en hacer que cualquier variable modificada que no sea la última sea volátil?

Respuestas a la pregunta(1)

Su respuesta a la pregunta