Improve performance with publication and immutability

[ Thanks to BlueVoodoo for this link.

“A disadvantage to using data shared among multiple
Java threads is that access to the data must be synchronized to
avoid an inconsistent view of the contents, which could result in
application failures. For example, the Hashtable class’s put() and
get() methods are synchronized. Synchronization is required so
simultaneous put() and get() methods have sole access to the data
when executing; otherwise, application data structures might get