单例模式
单例模式
静态常量
public class Singleton{
private final static Singleton Instance = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return Instance;
}
}
public class Singleton{
private final static Singleton Instance ;
static{
Instance = new Singleton()
}
private Singleton(){}
public static Singleton getInstance(){
return Instance;
}
}
public class Singleton {
private Singleton() {}
private static class SingletonInstance {
private static final Singleton INSTANCE =
new Singleton();
}
public static Singleton getInstance() {
return SingletonInstance.INSTANCE;
}
}
加锁方式
public class Singleton {
private static Singleton singleton;
private Singleton() {}
public static synchronized Singleton getInstance() {
if (singleton == null) {
singleton = new Singleton();
}
return singleton;
}
}
//不推荐 悲观锁
public class Singleton {
private static volatile Singleton singleton;
private Singleton() {}
public static Singleton getInstance() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
} //推荐
枚举
public enum Singleton {
INSTANCE;
public void whateverMethod() {
}
}
错误方法
public class Singleton {
private static Singleton singleton;
private Singleton() {}
public static Singleton getInstance() {
if (singleton == null) { //多线程时 可能创建多个实例
singleton = new Singleton();
}
return singleton;
}
}
public class Singleton {
private static Singleton singleton;
private Singleton() {}
public static Singleton getInstance() {
if (singleton == null) { //多线程 产生多实例
synchronized (Singleton.class) {
singleton = new Singleton();
}
}
return singleton;
}
}