实现方式
public class SingleTonInstance {
private SingleTonInstance(){};
public static SingleTonInstance getInstance(){
return SingleTonHolder.sInstance;
}
private static class SingleTonHolder{
private static final SingleTonInstance sInstance = new SingleTonInstance();
}
...
}
懒加载
程序运行时外部类会被加载到内存,而静态内部类不会加载,只有当getInstance方法被调用时才加载SingleTonHolder并生成外部类SingleTonInstance的实例对象sInstance 。
单例
由于sInstance是静态的,程序中仅有一个实例,保证了单例。
线程安全
加载SingleTonHolder类时,是调用ClassLoader的loadClass方法,最终加载类的方法中其实是采用synchronize加锁的,因为sInstance是该类成员变量也是在类加载方法中初始化的,所以保证了线程安全。
protected Class<?> loadClassOrNull(String cn, boolean resolve) {
synchronized (getClassLoadingLock(cn)) {
// check if already loaded
Class<?> c = findLoadedClass(cn);
return c;
}

本文介绍了如何通过懒加载机制在程序运行时动态创建单例实例,确保线程安全,利用ClassLoader的synchronized同步机制保证实例的唯一性。重点讲解了Singleton模式的实现方式和其在多线程环境下的工作原理。
528

被折叠的 条评论
为什么被折叠?



