public class Printer {
private Printer(){ }
public static Printer newInstance(){
return CreatePrinter.mPrinter;
}
private static class CreatePrinter{
private final static Printer mPrinter = new Printer();
}
}
因?yàn)殪o態(tài)的單例對(duì)象沒有作為類的成員變量直接實(shí)例化祟蚀,因此在Printer類加載時(shí)并沒有實(shí)例化mPrinter睹晒。第一次調(diào)用newInstance() 的時(shí)候加載內(nèi)部類CreatePrinter 舆吮,該內(nèi)部類定義了一個(gè)static 類型的變量mPrinter袜啃,此時(shí)會(huì)首先初始化這個(gè)變量,由JVM 來保證其線程安全性忿峻,確保該成員變量只被實(shí)例化一次葱她。
可見撩扒,通過使用這個(gè)方法,不僅實(shí)現(xiàn)了延遲加載吨些,又可以保證線程安全搓谆,不影響系統(tǒng)性能。
文/千里追風(fēng)(簡書作者)原文鏈接:http://www.reibang.com/p/127903ae72b0著作權(quán)歸作者所有锤灿,轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)挽拔,并標(biāo)注“簡書作者”辆脸。