单例模式
特点:一个对象在JVM中有且仅有一个对象实例。同时构造器全部私有化。
(1)饿汉式
(2)懒汉式 【线程不安全】
(3)双锁单例
饿汉式
public class Singleton {
private static Singleton singleton = new Singleton();
private Singleton() {}
public static final Singleton getInstance() {
return singleton;
}
}
懒汉式
public class Singleton {
private static Singleton singleton = null;
private Singleton() {}
public static final Singleton getInstance() {
if (singleton == null) { // 线程安全
singleton = new Singleton();
}
return singleton;
}
}
但是这样会有一个问题,就是说在多线程的情况下,是会出现线程不安全的,所以我们可以稍稍改造一下。
懒汉式(线程安全)
public class Singleton {
private static Singleton singleton = null;
private Singleton() {}
//当然这里的synchronized 关键字也可以加在方法上
public static final Singleton getInstance() {
synchronized(Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
return singleton;
}
}
双锁懒汉式
public class Singleton {
private static volatile Singleton singleton = null;
private Singleton() {}
//当然这里的synchronized 关键字也可以加在方法上
public static final Singleton getInstance() {
synchronized(Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
return singleton;
}
}