Java單利模式之飽漢模式淺談
阿新 • • 發佈:2018-11-05
public class SingleInstance {
public SingleInstance() { } //飽漢模式之執行緒安全和效率討論 /** * 效率低,每次進來都要同步,儘管例項不為空了 * @return */ public static synchronized SingleInstance getInstance() { if (instance == null) { instance = new SingleInstance(); } return instance; } /** * DCL單利模式,比上一個方法提高了效率,但是執行緒不是絕對安全 * @return public static SingleInstance instance; public static SingleInstance getDCLinstance() { if (instance == null) { synchronized (SingleInstance.class) { //DCL 雙重校驗,但是高併發中可能偶發指令集亂序問題 if (instance == null) { instance = new SingleInstance(); } } } return instance; } */ //volatile在JDK1.5之後退出,防止指令集亂序 public volatile static SingleInstance instance; public static SingleInstance getDCLinstance() { if (instance == null) { synchronized (SingleInstance.class) { //DCL 雙重校驗,但是高併發中可能偶發指令集亂序問題 if (instance == null) { instance = new SingleInstance(); } } } return instance; } 注意:當然也可以通過列舉來單例,因為列舉的建構函式是私有的
}