Is "o" guaranteed to refer to the string added by the thread 1?
If you can guarantee that no other inter-thread action except those you have explicitly mentioned will ever be committed against your list, then yes, you have the guarantee you are asking about.
If any thread mutates the list after it has been published via the volatile
variable, then no inter-thread guarantees hold any more.