1.什么是延迟初始化

延迟初始化(lazy initialization,即懒加载)是延迟到需要域的值时才将它初始化的行为。如果永远不需要这个值,这个域就永远不会被初始化。这种方法既静态域,也适用于实例域。

最好建议“除非绝对必要,否则就不要这么做”。

 

2.延迟初始化线程安全的一个策略:同步

延迟初始化的一个好处,是当域只在类的实例部分被访问,并且初始化这个域的开销很高,那就可能值得进行延迟初始化。

但是在大多数情况下,正常的初始化要优先于延迟初始化。因为在多线程的场景下,采用某种形式的同步是很重要的,否则就容易造成严重的Bug。

如下面的域bar,采取了延迟初始化的方法,那么在获取的时候,必须加上同步。