1.什么是延遲初始化

延遲初始化(lazy initialization,即懶加載)是延遲到需要域的值時(shí)才將它初始化的行為。如果永遠(yuǎn)不需要這個(gè)值,這個(gè)域就永遠(yuǎn)不會(huì)被初始化。這種方法既靜態(tài)域,也適用于實(shí)例域。

最好建議“除非絕對(duì)必要,否則就不要這么做”。

 

2.延遲初始化線程安全的一個(gè)策略:同步

延遲初始化的一個(gè)好處,是當(dāng)域只在類的實(shí)例部分被訪問,并且初始化這個(gè)域的開銷很高,那就可能值得進(jìn)行延遲初始化。

但是在大多數(shù)情況下,正常的初始化要優(yōu)先于延遲初始化。因?yàn)樵诙嗑€程的場景下,采用某種形式的同步是很重要的,否則就容易造成嚴(yán)重的Bug。

如下面的域bar,采取了延遲初始化的方法,那么在獲取的時(shí)候,必須加上同步。