第一种
public class Singleton {
//饿汉式
private static final Singleton minstance=new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return minstance;
}
}
我们依赖JVM 在加载这个类时马上创建此唯一的单个实例,JVM 保证在任何线程访问minstance静态变量之前,一定先创建此实例。
第二种:
public class Singleton {
//静态内部类单例模式
private Singleton(){}
public static Singleton getInstance(){
return SingletonHolder.mInstance;
}
/**
* 静态内部类
*/
private static class SingletonHolder{
private static final Singleton mInstance=new Singleton();
}
}
当第一次加载 Singleton 类是并不会初始化 mInstance,只有在第一次调用 Singleton 的 getInstance 方法时才会导致 mInstance 被初始化,因此,第一次调用 getInstance 方法会导致虚拟机加载 SingletonHolder 类,这种方式 不仅能够保证线程安全,也能够保证单例对象的唯一性,同时也延迟了单例的实例化,所以这是推荐使用的单例模式实现方式。
个人感觉来说,追求代码简洁的话,第一种感觉比较好一点