單例模式:
1)一個類只能創建一個實例
2)構造函數和靜態變量(加載類時即初始化)需為private
3)get方法應該為public static,可供全局訪問
//懶漢模式
public class lazySingleton {
private static lazySingleton singleton=null; //懶,所以就不實例化了,加載類較快,但是第一次訪問類可能會有點慢
private lazySingleton(){
//nothing
}
public static lazySingleton getSingleton(){
if(singleton==null){
synchronized (this){
if(singleton==null) //這里的二次判斷很有必要啊,在多線程中同時到達第一個if的可能有多個,若此處沒有二次二次判斷,會導致new singleton()同步執行多次。
singleton=new lazySingleton();
}
}
return singleton;
}
}
//餓漢模式
public class hungrySingleton {
private static final singleton=new hungerySingleton();//此處最好不要丟掉final
private hungrySingleton(){
//noting
}
public static hungrySingleton getSingleton(){
return singleton();
}
}
參考:Singleton單例模式(懶漢方式和餓漢方式)
單例模式中的懶漢和餓漢模式的區別