没有同步或易失性关键字的惰性初始化
前几天,霍华德·刘易斯·希普(Howard Lewis Ship)发布了一篇名为“我在Hacker Bed and Breakfast学到的东西”的博客文章,其中一个要点是:
通过延迟初始化只分配一次的 Java 实例字段不必同步或易失性(只要您可以接受跨线程的争用条件以分配给该字段);这是来自Rich Hickey
从表面上看,这似乎与关于跨线程内存更改可见性的公认智慧不一致,如果这在Java并发实践书或Java语言规范中有所涉及,那么我就错过了它。但这是HLS在Brian Goetz出席的活动中从Rich Hickey那里得到的,所以看起来一定有什么东西。有人可以解释一下这句话背后的逻辑吗?