Question inspired by the question at Why does BufferedInputStream copy a field to a local variable rather than use the field directly .
One of the ansers says this about the "volatile" keyword :
"Also, it is declared volatile, which means that if any thread changes the value of the variable, this change will immediately be reflected in all other threads."
This seems to suggest that if a variable is NOT declared volatile, then it will not be the case that "change will immediately be reflected in all other threads", or IOW, "changes to the variable will be reflected only later".
Questions :
(a) is that understanding correct ? (b) If so, when precisely ARE changes then applied / exposed to other threads ?