一:單例
public class SingleObject { private static SingleObject instance; public SingleObject(){} public static SingleObject getInstance(){ if(instance == null){ instance = new SingleObject(); } return instance; } } //缺點,在多線程狀態下,多個線程同時調用getInstance()會產生多個對象,不推薦 public class SingleObject { private static SingleObject instance; public SingleObject(){} public static synchronized SingleObject getInstance(){ if(instance == null){ instance = new SingleObject(); } return instance; } } //在getInstances()加上鎖就可以了,但是隻有第一次西藥new 對象,鎖有性能損耗。 public class SingleObject { private static SingleObject instance = new SingleObject(); public SingleObject(){} public static SingleObject getInstance(){ return instance; } } //這種方式還是比較好的 public class SingleObject { private volatile static SingleObject instance; public SingleObject(){} public static SingleObject getInstance(){ if(instance == null){ synchronized (SingleObject.class){ if(instance == null){ instance = new SingleObject(); } } } return instance; } } //雙重檢查也是可以的