单例模式
用于产生对象的具体实例,可以确保系统中一个类只产生一个实例。好处是,省略创建对象所花费的时间;减少系统内存的使用率,降低GC压力,缩短GC停顿时间。
饿汉模式
public class Singleton{
private Singleton(){
}
private static Singleton instance = new Singleton();
public static Singleton getInstance(){
return instance;
}
}
懒汉模式
public class Singleton{
private Singleton(){
}
private static Singleton instance = null;
public static synchronized Singleton getInstance(){
if (instance == null)
instance = new Singleton();
return instance;
}
}
为了使用延迟加载引入的同步关键字,是为了在多线程环境中避免同时创建多个实例。但是降低了系统性能,改进如下:
public class StaticSingleton{
private StaticSingleton(){
}
private static class SingletonHolder{
private static StaticSingleton instance = new StaticSingleton();
}
public static StaticSingleton getInstance(){
return SingletonHolder.instance;
}
}
使用内部类来维护单例的实例,当类被载入JVM中时,并不会初始化内部类,只有访问getInstance方法时才会加载holder,初始化实例。