Let's say we have a list reference:
volatile List<Object> a;
now thread 1 initializes it:
List<Object> newA = new LinkedList<>();
newA.add(new String("a"));
// Write to a volatile
a = newA;
then thread 2 does:
// first we read a volatile reference value, then invoke .get() method on it.
Object o = a.get(0);
Is "o" guaranteed to refer to the string added by the thread 1? Or am I missing something? Assuming that the code from the thread 1 is executed before the code from the thread 2.