設計模式:單例模式的三種建立方式及其各自的優缺點
阿新 • • 發佈:2019-01-10
單例模式:確保一個類只有一個例項,並提供全域性訪問點。在Java中實現單例模式需要私有的構造器,一個靜態方法和一個靜態變數。確定在效能和資源上的限制,如何選擇適當的方案來實現單例,以解決多執行緒的問題。如果使用多個類載入器,可能導致單例失效產生多個例項。雙重檢查加鎖不適用於1.4及更早版本的java。
方式1:
package singleton; /** * 同步getInstance()方法: * 有點:保證執行緒安全。 * 缺點:效能大大下降 * @author Arvon * */ public class Singleton1 { private static Singleton1 instance; private Singleton1(){} public static synchronized Singleton1 getInstance(){ if(instance==null) instance = new Singleton1(); return instance; } }
方式2:
package singleton;
/**
* “急切”建立例項
* 優點:執行緒安全
* 缺點: 增加程式建立和執行時的負擔
* @author Arvon
*
*/
public class Singleton2 {
private static Singleton2 instance = new Singleton2();
private Singleton2(){}
public static Singleton2 getInstance(){
return instance;
}
}
方式3:
package singleton; /** * 雙重檢查加鎖 * @author Administrator * */ public class Singleton3 { private volatile static Singleton3 instance; private Singleton3(){} public static Singleton3 getInstance(){ if(instance==null) synchronized (Singleton3.class) { //只第一次進入同步塊 if(instance==null)instance = new Singleton3(); } return instance; } }