一、單例的特點
1、單例類只可有一個實例。
2、單例類必須自己創建自己這唯一的實例。
3、單例類必須給所有其他對象提供這一實例。
概括成一句話是:確保一個類只有一個實例,並提供一個全局的訪問點。
二、代碼示例
public class Singleton {
//第一種方式(餓漢式):JVM加載的時候就創建唯一的實例
private static Singleton singleton = new Singleton();//new 一個自己私有的靜態實例
private Singleton(){};//定義一個私有的構造函數(。。。)
public static Singleton getSingleton(){//創建一個公有的靜態獲取實例的方法
return singleton;
}
//構建一個測試方法進行單例測試
public void testSingleton(){
System.out.println("The Singleton is success! ");
}
//第二種方式(懶漢式):1非線程安全的
private static Singleton singleton ;
private Singleton(){};
public static Singleton getSingleton(){
if(singleton==null){
singleton = new Singleton();
}
return singleton;
}
//第二種方式:2多線程安全的
private static Singleton singleton ;
private Singleton(){};
public synchronized static Singleton getSingleton(){
if(singleton==null){
singleton = new Singleton();
}
return singleton;
}
//第二種方式:3解決多線程安全的及重複枷鎖的問題
private static Singleton singleton ;
private Singleton(){};
public static Singleton getSingleton(){
if(singleton==null){
synchronized(Singleton.class){
if(singleton == null){
singleton = new Singleton();
}
}
}
return singleton;
}
//第二種方式:4靜態內部類
private static class SingletonHolder {
private static final Singleton singleton = new Singleton();
}
public static final Singleton getSingleton() {
return SingletonHolder.singleton;
}
}