I looked more into it and I can agree that the complexity is probably not worth the possible performance gain in this instance. In the interest of correctness, the use of volatile is sufficient to make this work ([1](http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html), [2](http://stackoverflow.com/questions/2576513/is-writing-a-reference-atomic-on-64bit-vms)). (My original idea to just use a primitive was incorrect; while assignment to 32-bit primitive types and object references *is* atomic, updates may be reordered arbitrarily without `volatile`.)

Scala additionally provides `lazy val`, which simply uses DCL with a volatile int to ensure thread safety ([3](http://code-o-matic.blogspot.com/2009/05/double-checked-locking-idiom-sweet-in.html)). This would be a more idiomatic way to achieve the same behavior.