一般来说,通常写法是这样的:
public class Singleton {
private static Singleton instance;
private Singleton (){}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
这种写法线程不安全,所以有的是加线程锁,加了之后是这样的:
public class Singleton {
private static Singleton instance;
private Singleton (){}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
这样写挺好的,就是效率低,增加效率的写法:
public class Singleton {
private volatile static Singleton singleton;
private Singleton (){}
public static Singleton getSingleton() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}
上面用的是最多的,也比较推荐,挺好的。
还有一种静态内部类写法是这样的:
publlic class Singleton {
private Singleton() {}
private static class SingletonLoader {
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonLoader.INSTANCE;
}
}
推荐使用静态内部类写法,或者volatile+synchronized,都行。