title: Is Java ArrayList / String / atomic variable reading thread safe?
body: <p>I've been mulling this over &amp; reading but can find an absolute authoritative answer.</p>
  
  <p>I have several deep data structures made up of objects containing ArrayLists, Strings &amp; primitive values. I can guarantee that the data in these structures will not change (no thread will ever make structural changes to lists, change references, change primitives).</p>
  
  <p>I'm wondering if reading data in these structures is thread safe; i.e. is it safe to recursively read variables from the objects, iterate the ArrayLists etc. to extract information from the structures in multiple threads without synchronization?</p>