@Ichoran 
A newly created object passed from one thread to another (new :: here) is only guaranteed to have its state after the constructor completes be visible to the other thread, later mutation might show up at any time later --unless there is a memory barrier.

https://gist.github.com/jrudolph/6552186

https://groups.google.com/forum/#!searchin/scala-internals/List$2C$20Vector$20and$20the$20JMM/scala-internals/P7WNVkJQdHk/ZF0HUaCVkycJ