单例模式双重检查锁
public static Singleton getInstance() {
if (instance == null) { // 这种方式采用双锁机制,安全且在多线程情况下能保持高性能
synchronized(Singleton.class) {
if (instance == null)
instance = new Singleton();
}
}
return instance;
}
单例模式(枚举实现)
enum danli {
INSTANCE;
private String string;
public String getString() {
return string;
}
public void setString(String string) {
this.string = string;
}
}
danli one = danli.INSTANCE;
one.setString("hello");
System.out.println(one.getString());
danli two = danli.INSTANCE;
System.out.println(one == two); // true
懒汉式
public class Singleton {
private static Singleton instance;
private Singleton () {}
public static synchronized Singleton getInstance() { // 必须加锁 synchronized 才能保证单例,但加锁会影响效率
if (instance == null) {
instance = new Singleton(); // 第一次调用才初始化,避免内存浪费
}
return instance;
}
}
饿汉式
public class Singleton {
private static Singleton instance = new Singleton(); // 类加载时就初始化,浪费内存
private Singleton () {}
public static Singleton getInstance() { // 没有加锁,执行效率会提高
return instance;
}
}
静态内部类
public class Singleton {
private static class SingletonHolder {
private st