所谓单例模式 类对象只有一个实例。
1.饿汉式:因为静态变量在初始化的时候,便已经创建,故只要不调用class.forName等方法,该形式便是线程安全
//饿汉式 线程安全
public class Singleton {
private static Singleton singleton = new Singleton();
private Singleton() {
};
public static Singleton getSingleton() {
return singleton;
}
}
2.懒汉式 线程不安全的懒汉式,对该方法进行优化
//懒汉式
public class Singleton {
private static Singleton singleton ;
private Singleton() {
};
public static Singleton getSingleton() {
if(singleton == null ) {
singleton = new Singleton();
}
return singleton;
}
}
3.懒汉式 线程安全
1.同步延时处理
public class Singleton {
private static Singleton singleton ;
private Singleton() {
};
public static synchronized Singleton getSingleton() {
if(singleton == null ) {
singleton = new Singleton();
}
return singleton;
}
}
2.
public class Singleton {
private static Singleton singleton ;
private Singleton() {
};
public static Singleton getSingleton() {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
return singleton;
}
}
3.双重检测
public class Singleton {
private static volatile Singleton singleton ;//注意这里一定要volatile,不然会导致多线程中singleton未及时读取
private Singleton() {
};
public static Singleton getSingleton() {
if(singleton == null) {//这总方法只会在singleton为null的时候才会进入 提高效率
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}