单例模式的实现方法众多,但在多线程环境下,通过静态内部类的方案既能保证线程安全,又能在调用时才加载。具体示例如下:
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不会被同时加载。当访问其静态变量、方法时,静态内部类才被加载并初始化。