单例模式:
确保一个类只有一个实例,并提供一个全局访问点
饿汉式:(线程安全)
public class Singleton {
private static Singleton uniqueInstance = new Singleton();
private Singleton() {
}
public static Singleton getInstance() {
return uniqueInstance;
}
}
懒汉式:(线程不安全)
public class Singleton {
private static Singleton uniqueInstance;
private Singleton() {
}
public static Singleton getInstance() {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
return uniqueInstance;
}
}
双重检查加锁:(线程安全)
public class Singleton {
private volatile static Singleton uniqueInstance;
private Singleton() {
}
public static Singleton getInstance() {
if (uniqueInstance == null) {
synchronized (Singleton.class) {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
}
}
return uniqueInstance;
}
}
要点:
1、单例模式确保程序中一个类最多只有一个实例
2、单例模式也提供访问这个实例的全局点
3、在Java中实现单例模式需要私有的构造器,一个静态方法和一个静态变量
4、确定在性能和资源上的限制,然后小心地选择适当的方案来实现单例,以解决多线程的问题
5、如果不是采用第五的Java2,双重检查加锁实现会失效
6、小心,你如果使用多个类加载器,可能导致单例失效而产生多个实例
7、如果使用JVM1.2或之前的版本,你必须建立单例注册表,以免垃圾收集器将单例回收