懒汉模式:线程不安全
public class Singleton {
private static Singleton singleton;
private Singleton(){
}
public static Singleton getInstance(){
if (singleton == null) {
singleton = new Singleton();
}
return singleton;
}
}
测试:
Singleton instance = Singleton.getInstance();
Singleton instance1 = Singleton.getInstance();
Singleton instance2 = Singleton.getInstance();
System.out.println(instance==instance1);
输出为true代表获得的为同一对象
懒汉式:线程安全
public class Singleton1 {
private static Singleton1 singleton1;
private Singleton1(){
}
public static synchronized Singleton1 getInstance(){
if (singleton1 == null) {
singleton1 = new Singleton1();
}
return singleton1;
}
}
双检锁/双重校验锁(DCL,即 double-checked locking)
public class Singleton2 {
/*
* 线程安全,在多线程下能保持高的性能
* */
private static Singleton2 singleton2;
private Singleton2(){
}
public static Singleton2 getInstance(){
if (singleton2==null) {
synchronized (Singleton2.class) {
if (singleton2 == null) {
singleton2 = new Singleton2();
}
}
}
return singleton2;
}
}