'Is volatile enough for changing reference to a list?

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.



Solution 1:[1]

YES,if Thread1 is executed before the Thread2 then it will provide the guarantee.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Kick