單例模式的實現方法眾多,但在多線程環境下,通過靜態內部類的方案既能保證線程安全,又能在調用時才加載。具體示例如下:
public class SingleTon {
// 利用靜態內部類特性實現外部類的單例
private static class SingleTonBuilder {
private static SingleTon singleTon = new SingleTon();
}
// 私有化構造函數
private SingleTon() {
}
public static SingleTon getInstance() {
return SingleTonBuilder.singleTon;
}
public static void main(String[] args) {
SingleTon instance = getInstance();
}
}
原理:加載SingleTon時,靜態內部類SingleTonBuilder不會被同時加載。當訪問其靜態變量、方法時,靜態內部類才被加載并初始化。
image.png