1. 雙重檢查加鎖
package com.handaer.util;
public class Singleton {
/**
* 對保存的實例的變量添加volatile的修飾
*
* */
private volatile static Singleton instance = null;
private Singleton () {
}
public static Singleton getInstance() {
// 先檢查實列是否存在,如果不存在才進入下面的同步快;
if (instance == null) {
// 同步塊,線程安全地創建實例
synchronized (Singleton.class) {
// 再次檢查,如果不存在,才真正創建實例
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
2. java中更好的一種單例模式實現
public class Singleton {
/**
* 類級的內部類,也就是靜態的成員式內部類,該類的實例與外部類的實例
* 沒有綁定關係,而且只有被調用的時候纔會裝載,從而實現延遲加載
* */
private static class SingletonHolder {
private static Singleton instance = new Singleton();
}
/**
* */
private Singleton() {}
public static Singleton getInstance() {
return SingletonHolder.instance;
}
}