public class Singleton {
private final static Singleton INSTANCE = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return INSTANCE;
}
}
在类加载时完成实例化。避免线程同步问题;
若从始至终未使用此实例,则会造成内存的浪费。
2、饿汉式(静态代码块)
public class Singleton {
private static Singleton instance;
static {
instance = new Singleton();
}
private Singleton() {}
public static Singleton getInstance() {
return instance
}
}
在类装载的时候,就执行静态代码块中的代码。优缺点与上面是一样的。
3、懒汉式(线程不安全)
public class Singleton {
private static Singleton singleton;
private Singleton() {};
public static Singleton getInstance() {
if (null == singleton) {
singleton = new Singleton();
}
return singleton;
}
}
4、双重检查
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (null == instance) {
synchronized (Singleton.class) {
if (null == instance) {
instance = new Singleton();
}
}
}
return instance;
}
}