1. 程式人生 > 其它 >DCL單例模式:單例+多執行緒

DCL單例模式:單例+多執行緒

/*
DCL單例模式 懶漢式 在多執行緒環境下 對外存在一個物件
構造器私有化
提供私有的靜態屬性
提供公共的靜態方法 獲取屬性
*/
public class DoubleCheckedLocking {
//提供私有的靜態屬性 解決指令重排
private static volatile DoubleCheckedLocking instance;
//構造器私有化
private DoubleCheckedLocking(){

}
//提供一個公有方法建立物件
public static DoubleCheckedLocking getInstance(){
//再次檢測
if (null != instance) {
return instance;
}
synchronized (DoubleCheckedLocking.class) {
if (null == instance) {
instance = new DoubleCheckedLocking();
//1。開闢空間 2,初始化物件資訊 3。返回物件的地址給引用
}
}
return instance;
}
public static void main(String[] args) {
Thread thread = new Thread(() -> {
System.out.println(DoubleCheckedLocking.getInstance());
});
thread.start();
System.out.println(DoubleCheckedLocking.getInstance());
}
}